不墨迹,直接上代碼
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伺服器控件綁定資料後的分頁
備注:菜鳥,求指點。
轉載于:https://www.cnblogs.com/caoxianbing/p/3486746.html