我们以前做ASP.NET网站,通常是把DataSet绑定到显示控件上,再用各种手段进行分页,比如PagedDataSource。然而,如果你是从业务层取数据,通常是一个List,这个时候就不能用以往的方法分页了。
pageControl.ascx
<asp:Label ID="lb_pageIndex" runat="server"></asp:Label>
/<asp:Label ID="lb_pages" runat="server"></asp:Label>
页 每页<asp:Label ID="lb_pageSize" runat="server"></asp:Label> 总数<asp:Label ID="lb_rCount" runat="server"></asp:Label>
<asp:LinkButton ID="btn_frist" runat="server" OnClick="btn_frist_Click">首 页</asp:LinkButton>
<asp:LinkButton ID="btn_prevenient" runat="server" OnClick="btn_prevenient_Click">上一页</asp:LinkButton>
<asp:LinkButton ID="btn_next" runat="server" OnClick="btn_next_Click">下一页</asp:LinkButton>
<asp:LinkButton ID="btn_last" runat="server" OnClick="btn_last_Click">尾 页</asp:LinkButton>
页跳转:<asp:DropDownList ID="pagelist" runat="server" AutoPostBack="True" OnTextChanged="pagelist_TextChanged"></asp:DropDownList>
pageControl.ascx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
public partial class control_pageControl : System.Web.UI.UserControl
{
public delegate void setPageHandler(object sender, pageEventArgs e);
public event setPageHandler setPage;
public class pageEventArgs : EventArgs
{
private int page;
public int Page
{
get { return page; }
}
public pageEventArgs(int page)
{
this.page = page;
}
}
protected virtual void OnsetPage(pageEventArgs e)
{
if (setPage != null)
{
setPage(this, e);
}
}
//分页数据源
public PagedDataSource DataSource = new PagedDataSource();
//属性:每页记录数
public int PageSize
{
get
{
if (ViewState["PageSize"] != null)
{
return int.Parse(ViewState["PageSize"].ToString());
}
else
{
return 0;
}
}
set { ViewState["PageSize"] = value; }
}
//属性:总记录数
public int totalRow
{
get
{
if (ViewState["totalRow"] != null)
{
return int.Parse(ViewState["totalRow"].ToString());
}
else
{
return 0;
}
}
//set { ViewState["totalRow"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ViewState["pagecount"] == null)
{
Response.Write("<script>alert('错误:您没有在页面首次读入时绑定分页控件');</script>");
return;
}
pagelist.Items.Clear();
for (int i = 1; i <= (int)ViewState["pagecount"]; i++)
{
pagelist.Items.Add(i.ToString());
}
}
}
public void DataBind(DataTable dt,int curpage)
{
DataSource.DataSource = dt.DefaultView;
DataSource.AllowPaging = true;
DataSource.PageSize = PageSize;
ViewState["totalRow"] = dt.Rows.Count;
ViewState["currentpage"] = curpage;
if (curpage > DataSource.PageCount - 1) DataSource.CurrentPageIndex = curpage - 1;
else DataSource.CurrentPageIndex = curpage;
ViewState["pagecount"] = DataSource.PageCount;
if ((int)ViewState["currentpage"] < 0)
{
ViewState["currentpage"] = 0;
}
if ((int)ViewState["currentpage"] > (int)ViewState["pagecount"] - 1)
{
ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
}
lb_pageIndex.Text = Convert.ToString(curpage + 1);
lb_pages.Text = ViewState["pagecount"].ToString();
lb_rCount.Text = this.totalRow.ToString();
lb_pageSize.Text = this.PageSize.ToString();
btn_frist.Enabled = true;
btn_prevenient.Enabled = true;
btn_next.Enabled = true;
btn_last.Enabled = true;
if (DataSource.IsFirstPage)
{
btn_frist.Enabled = false;
btn_prevenient.Enabled = false;
}
if (DataSource.IsLastPage)
{
btn_next.Enabled = false;
btn_last.Enabled = false;
}
pagelist.Text = Convert.ToString((int)ViewState["currentpage"] + 1);
}
public void DataBind(IList list, int curpage)
{
DataSource.DataSource = list;
DataSource.AllowPaging = true;
DataSource.PageSize = PageSize;
ViewState["totalRow"] = list.Count;
ViewState["currentpage"] = curpage;
if (curpage > DataSource.PageCount - 1) DataSource.CurrentPageIndex = curpage - 1;
else DataSource.CurrentPageIndex = curpage;
ViewState["pagecount"] = DataSource.PageCount;
if ((int)ViewState["currentpage"] < 0)
{
ViewState["currentpage"] = 0;
}
if ((int)ViewState["currentpage"] > (int)ViewState["pagecount"] - 1)
{
ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
}
lb_pageIndex.Text = Convert.ToString(curpage + 1);
lb_pages.Text = ViewState["pagecount"].ToString();
lb_rCount.Text = this.totalRow.ToString();
lb_pageSize.Text = this.PageSize.ToString();
btn_frist.Enabled = true;
btn_prevenient.Enabled = true;
btn_next.Enabled = true;
btn_last.Enabled = true;
if (DataSource.IsFirstPage)
{
btn_frist.Enabled = false;
btn_prevenient.Enabled = false;
}
if (DataSource.IsLastPage)
{
btn_next.Enabled = false;
btn_last.Enabled = false;
}
pagelist.Text = Convert.ToString((int)ViewState["currentpage"] + 1);
}
protected void btn_frist_Click(object sender, EventArgs e)
{
ViewState["currentpage"] = 0;
pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
OnsetPage(pe);
}
protected void btn_last_Click(object sender, EventArgs e)
{
ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
OnsetPage(pe);
}
protected void btn_prevenient_Click(object sender, EventArgs e)
{
if ((int)ViewState["currentpage"] > 0)
{
ViewState["currentpage"] = (int)ViewState["currentpage"] - 1;
}
pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
OnsetPage(pe);
}
protected void btn_next_Click(object sender, EventArgs e)
{
if ((int)ViewState["currentpage"] < ((int)ViewState["pagecount"] - 1))
{
ViewState["currentpage"] = (int)ViewState["currentpage"] + 1;
}
pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
OnsetPage(pe);
}
protected void pagelist_TextChanged(object sender, EventArgs e)
{
ViewState["currentpage"] = int.Parse(pagelist.Text);
pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"] - 1);
OnsetPage(pe);
}
}
页面调用:
protected void Page_Load(object sender, EventArgs e)
{
this.PageControl1.setPage += new control_pageControl.setPageHandler(PageControl1_setPage);
if (!Page.IsPostBack)
{
ViewState["page"] = 0;
binddata();
}
}
void PageControl1_setPage(object sender, control_pageControl.pageEventArgs e)
{
ViewState["page"] = e.Page;
binddata();
}
private void binddata()
{
List<M_baseinfo> list = baseinfoBll.getList();
PageControl1.DataBind(list, (int)ViewState["page"]);
GridView1.DataSource = PageControl1.DataSource;
GridView1.DataBind();
}