自己写的一个ASP.NET服务器控件Repeater和GridView分页类
不墨迹,直接上代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace CutPage { //定义查询方法的委托。pageindex查询的页码;pagesize每一页的数据量 public delegate object GetList(int pageindex,int pagesize); public class SplitPage { public int CurrentPageIndex { get { return Convert.ToInt32(CurrentPage.Session["index"]); } set { } }//当前页码 public int PageCount {get;set; }//页面的数量 public event GetList GetListHandle;//根据委托定义查询事件 public HtmlGenericControl HGC { get; set; }//容器(div) public int PageSize { get; set; }//每个页面中数据的数量 public Page CurrentPage { get; set; }//当前页面 public Repeater ReControl { get; set; } public GridView GvControl { get; set; } public LinkButton UpLb = new LinkButton { Text=" 上一页 ",ID="uplb" };//上一页按钮 private LinkButton DownLb = new LinkButton { Text=" 下一页 ",ID="downlb"};//下一页按钮 private LinkButton DUpLb = new LinkButton { Text=" ... ",ID="DUpLb"}; private LinkButton DDownLb = new LinkButton { Text=" ... ",ID="DDownLb"}; private TextBox txtPage = new TextBox { ID = "txtPage" }; private LinkButton lbGo = new LinkButton { Text=" Go ",ID="lbGo"}; //构造方法,传入当前页面 public SplitPage(Page page) { PageSize = 5; CurrentPage = page; HGC = new HtmlGenericControl(); //判断单签页面的session中是否有index这个项,如果没有则加入其实为0 if (CurrentPage.Session["index"] == null) CurrentPage.Session.Add("index", 0); } //绑定Repeater控件方法,返回一个html容器(div) public HtmlGenericControl BindRepeater(Repeater re) { Procee(); ReControl = re; re.DataSource = GetListHandle(CurrentPageIndex, PageSize); re.DataBind(); return HGC; } public HtmlGenericControl BindGridView(GridView gv) { Procee(); this.GvControl = gv; gv.DataSource = GetListHandle(CurrentPageIndex,PageSize); gv.DataBind(); return HGC; } private void Procee() { CreateControl(); UpLb.Click += UpLb_Click; DownLb.Click += DownLb_Click; HGC.Controls.Add(UpLb); HGC.Controls.Add(DownLb); HGC.Controls.Add(txtPage); lbGo.Click += lbGo_Click; HGC.Controls.Add(lbGo); } //根据当前页码生成控件 public void CreateControl() { int pages = CurrentPageIndex / 10 * 10; this.HGC.Controls.Clear(); if (pages > 0) { DUpLb.Click += DUpLb_Click; this.HGC.Controls.Add(DUpLb); } for (int i = pages; i < pages + 10; i++) { if (i <= PageCount) { LinkButton lb = new LinkButton(); if (i == CurrentPageIndex) lb.Enabled = false; lb.Text = " " + i.ToString(); lb.ID = i.ToString(); lb.Click += lb_Click; this.HGC.Controls.Add(lb); } } if (pages+10 <= this.PageCount) { DDownLb.Click += DDownLb_Click; this.HGC.Controls.Add(DDownLb); } } private void lbGo_Click(object sender, EventArgs e) { int goIndex = 0; if (Int32.TryParse(txtPage.Text,out goIndex)) { if (goIndex <= PageCount&&goIndex>0) { CurrentPage.Session["index"] = goIndex; CreateControl(); IsNull(); } else CurrentPage.Response. Write("<script>alert('索引超出范围')</script>"); } else CurrentPage.Response. Write("<script>alert('请输入正确的索引')</script>"); } //页码的单击事件 private void lb_Click(object sender, EventArgs e) { LinkButton lb = sender as LinkButton; CurrentPage.Session["index"]=Convert.ToInt32(lb.Text); CreateControl(); IsNull(); } //判断是绑定的控件 private void IsNull() { if (ReControl != null) BindRepeater(ReControl); else BindGridView(GvControl); } //上一页的单击事件 private void UpLb_Click(object sender, EventArgs e) { if (CurrentPageIndex >= 0) { CurrentPage.Session["index"] = --CurrentPageIndex; CreateControl(); IsNull(); } } //下一页的单击事件 private void DownLb_Click(object sender, EventArgs e) { if (CurrentPageIndex < PageCount) { CurrentPage.Session["index"] = ++CurrentPageIndex; CreateControl(); IsNull(); } } private void DUpLb_Click(object sender, EventArgs e) { int pi = (CurrentPageIndex-10) / 10 * 10; CurrentPage.Session["index"] = pi; IsNull(); } private void DDownLb_Click(object sender, EventArgs e) { int pi = (CurrentPageIndex + 10) / 10 * 10; CurrentPage.Session["index"] = pi; IsNull(); } } }
使用方法
SplitPage sp = new SplitPage(this); sp.GetListHandle += bm.GetBooks;//分页查询数据库的方法 sp.PageCount = bm.BooksCount() / sp.PageSize ;//总页数 this.divOne.Controls.Add(sp.BindGridView(dvBookInfo));//把放回的div加入到设置好的divOne中,dvBookInfo是一个GridView控件,
//也可以是Repeater控件
上面这个分页类可以在类中添加相关代码,支持其他ASP.NET服务器控件绑定数据后的分页
备注:菜鸟,求指点。