事先说明,原理做的很简单,取出一数据集,对其进行操作.
控件使用方法:
首先把下面的代码copy进你的新项目,编译成dll后,然后加载进你的工程.
从工具箱中拉出datalist,和本控件"DataListControl"到页面.
代码实现
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
using System.Data;
using System.Data.SqlClient;

namespace DataListPageControl.WjbsControl


{
public class DataListControl: CompositeControl

{
private Label lbNowPageNumber = new Label();
private Button btPageUp = new Button();
private Button btPageDown = new Button();
private Button btPageFirst = new Button();
private Button btPageLast = new Button();
private string ddlName;
private int m_PageNow = 1; //当前页号
private DataSet m_ds = new DataSet(); //传入的数据集合
private int m_PageSize = 5; //页面布局;

protected override object SaveViewState()

{
object[] o = new object[5];
o[0] = ddlName;
o[1] = m_PageNow;
o[2] = m_ds;
o[3] = m_PageSize;
return o;
}

protected override void LoadViewState(object savedState)

{
object[] o = new object[4];
o = (object[])savedState;
ddlName = (string)o[0];
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
m_PageNow = int.Parse( o[1].ToString());
m_ds = (DataSet)o[2];
m_PageSize = int.Parse(o[3].ToString());
}

private void InitializeComponent()

{
lbNowPageNumber.Text = "1/1";
btPageUp.Text = "上一面";
btPageDown.Text = "下一面";
btPageFirst.Text = "第一面";
btPageLast.Text = ">>>>";

btPageUp.Click += new EventHandler(btPageUp_Click);
btPageDown.Click+=new EventHandler(btPageDown_Click);
btPageFirst.Click+=new EventHandler(btPageFirst_Click);
btPageLast.Click+=new EventHandler(btPageLast_Click);
}

private void btPageDown_Click(object sender, EventArgs e)

{
if ( null == m_ds || 0 == m_ds.Tables[0].Rows.Count)
throw new Exception("请给出数据源");
if (null == ddlName)
throw new Exception("请指定datalist控件");

if (m_PageNow < PageCout())

{
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
ddl.DataSource = PageNext();
ddl.DataBind();
}
}

private void btPageFirst_Click(object sender, EventArgs e)

{
if (null == m_ds || 0 == m_ds.Tables[0].Rows.Count)
throw new Exception("请给出数据源");
if (m_PageNow == 1) return;
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
ddl.DataSource = pageFirst();
ddl.DataBind();
}

private void btPageLast_Click(object sender, EventArgs e)

{
if (null == m_ds || 0 == m_ds.Tables[0].Rows.Count)
throw new Exception("请给出数据源");
if (m_PageNow < PageCout())

{
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
ddl.DataSource = pageLast();
ddl.DataBind();
}
}

private void btPageUp_Click(object sender, EventArgs e)

{
if (null == m_ds || 0 == m_ds.Tables[0].Rows.Count)
throw new Exception("请给出数据源");
if (m_PageNow == 1) return;
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
ddl.DataSource = PageUp();
ddl.DataBind();
}

protected override void CreateChildControls()

{
Controls.Add(lbNowPageNumber);
Controls.Add(new LiteralControl(" ") );
Controls.Add(btPageUp);
Controls.Add(new LiteralControl(" ") );
Controls.Add(btPageDown);
Controls.Add(new LiteralControl(" "));
Controls.Add(btPageFirst);
Controls.Add(new LiteralControl(" "));
Controls.Add(btPageLast);

if (null == m_ds)
throw new Exception("请给出数据源");

try

{
DataList ddl = ((DataList)this.Page.FindControl(ddlName));
ddl.DataSource = GotePageN(m_PageNow);
ddl.DataBind();
}
catch

{
return;
}

}


/**//// <summary>
/// 控件名称
/// </summary>
[Browsable(false), Description("绑定的datalist控件名"), DefaultValue("DataList1")]
public string ControlName

{
set

{
ddlName = value;
}
}


/**//// <summary>
/// 无参构造
/// </summary>
public DataListControl()

{
InitializeComponent();
}


/**//// <summary>
/// 有参构造
/// </summary>
/// <param name="ds">传入的数据集</param>
public DataListControl(DataSet ds)

{
InitializeComponent();
DataSetSourse = ds;
}


/**//// <summary>
/// 传入的数据集
/// </summary>
[Browsable(false),Description("数据集形式的数据源")]
public DataSet DataSetSourse

{

set
{ m_ds = value; }
}


/**//// <summary>
/// 页面布局
/// </summary>
[Browsable(true),Description("每页显示项数")]
public int PageSize

{

get
{ return m_PageSize; }

set
{ m_PageSize = value; }
}


/**//// <summary>
/// 打开一页
/// </summary>
/// <param name="pageNo">当前页</param>
/// <returns>返回操作的结果</returns>
public DataSet GotePageN(int m_PageNow)

{
DataSet dsA = new DataSet();
dsA = m_ds.Clone();
int a = PageCout();//获取该记录集的总条数
if (m_PageNow <= a && m_PageNow >= 1)

{
int rowNum = (m_PageNow - 1) * PageSize;
for (int i = rowNum; i < rowNum + PageSize; i++)

{
if (i >= m_ds.Tables[0].Rows.Count)
break;
if (m_ds.Tables[0].Rows[i] != null)

{
dsA.Tables[0].ImportRow((m_ds.Tables[0].Rows[i]) as DataRow);
}
}
}

lbNowPageNumber.Text = m_PageNow.ToString() + "/" + PageCout().ToString();

return dsA;
}


/**//// <summary>
/// 返回总页数
/// </summary>
/// <returns></returns>
public int PageCout()

{
int rowCount = m_ds.Tables[0].Rows.Count;
int PageTemp = (int)(rowCount / m_PageSize);
if (rowCount % m_PageSize == 0)
return PageTemp;
else
return (PageTemp + 1);
}


/**//// <summary>
/// 下一页
/// </summary>
/// <param name="pageNo">当前页面</param>
/// <returns>返回结果</returns>
public DataSet PageNext()

{
DataSet dsA = new DataSet();
dsA = m_ds.Clone();
int a = PageCout();//获取该记录集的总条数
if (m_PageNow < a)

{
int rowNum = m_PageNow * PageSize;
for (int i = rowNum; i < rowNum + PageSize; i++)

{
if (i >= m_ds.Tables[0].Rows.Count)
break;
dsA.Tables[0].ImportRow((m_ds.Tables[0].Rows[i]) as DataRow);
}
m_PageNow += 1;
}

lbNowPageNumber.Text = m_PageNow.ToString() + "/" + PageCout().ToString();
return dsA;
}


/**//// <summary>
/// 上一页
/// </summary>
/// <param name="pageNo">当前页面</param>
/// <returns></returns>
public DataSet PageUp()

{
DataSet dsA = new DataSet();
dsA = m_ds.Clone();
int a = PageCout();//获取该记录集的总条数
if (m_PageNow >= 2)

{
int rowNum = (m_PageNow - 2) * PageSize;
for (int i = rowNum; i < rowNum + PageSize; i++)

{
if (i >= m_ds.Tables[0].Rows.Count)
break;
dsA.Tables[0].ImportRow((m_ds.Tables[0].Rows[i]) as DataRow);
}
m_PageNow -= 1;
}

lbNowPageNumber.Text = m_PageNow.ToString() + "/" + PageCout().ToString();
return dsA;
}


/**//// <summary>
/// 转到首页
/// </summary>
/// <returns>返回查询结果</returns>
public DataSet pageFirst()

{
DataSet dsA = new DataSet();
dsA = m_ds.Clone();
int a = PageCout();//获取该记录集的总条数
if (a != 0)

{
int rowNum = 0;
for (int i = rowNum; i < rowNum + PageSize; i++)

{
if (i >= m_ds.Tables[0].Rows.Count)
break;
dsA.Tables[0].ImportRow((m_ds.Tables[0].Rows[i]) as DataRow);
}
m_PageNow = 1;
}

lbNowPageNumber.Text = m_PageNow.ToString() + "/" + PageCout().ToString();
return dsA;
}



/**//// <summary>
/// 最后一页
/// </summary>
/// <returns></returns>
public DataSet pageLast()

{
DataSet dsA = new DataSet();
dsA = m_ds.Clone();
int a = PageCout();//获取该记录集的总条数
if (a != 0)

{
int rowNum = (a - 1) * PageSize;
for (int i = rowNum; i < rowNum + PageSize; i++)

{
if (i >= m_ds.Tables[0].Rows.Count)
break;
dsA.Tables[0].ImportRow((m_ds.Tables[0].Rows[i]) as DataRow);
}
m_PageNow = a;
}

lbNowPageNumber.Text = m_PageNow.ToString() + "/" + PageCout().ToString();
return dsA;
}
}
}
