控件使用方法:
首先把下面的代码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;
}
}
}
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;
}
}
}