using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Text.RegularExpressions;
namespace GridviewPaging
{
public class PagerManager
{
private GridView _gridview;
public PagerManager() { }
public PagerManager(GridView gridview)
{
_gridview = gridview;
}
private void doPaging()
{
_gridview.AllowPaging = true;
_gridview.PageIndexChanging += new GridViewPageEventHandler(_gridview_PageIndexChanging);
_gridview.RowCreated += new GridViewRowEventHandler(_gridview_RowCreated);
}
public void doPaging(GridView g)
{
_gridview = g;
doPaging();
}
public void doPaging(int page)
{
_gridview.PageSize = page;
doPaging();
}
public void doPaging(int page, GridView g)
{
_gridview = g;
_gridview.PageSize = page;
doPaging();
}
void _gridview_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)//当生成pager行时候
{
//声明“第一页”、“前一页”、“后一页”、“最后页”、“页提示信息”#region 声明“第一页”、“前一页”、“后一页”、“最后页”、“页提示信息”
Label label_Index = new Label();
LinkButton Button_IndexFirst = new LinkButton();
LinkButton Button_IndexLast = new LinkButton();
LinkButton Button_IndexNext = new LinkButton();
LinkButton Button_IndexPrevious = new LinkButton();
Label lbPre = new Label();
lbPre.Text = "Prevose: " + GenePage(sender) + " of " + ((GridView)sender).PageCount;
Button_IndexFirst.Text = "First ";
Button_IndexFirst.CommandName = "first";
Button_IndexFirst.ForeColor = Color.Blue;
Button_IndexFirst.Command += new CommandEventHandler(PageButtonClick);//注册点击事件
Button_IndexNext.Text = "<< ";
//previous
Button_IndexNext.CommandName = "previous";
Button_IndexNext.ForeColor = Color.Blue;
Button_IndexNext.Command += new CommandEventHandler(PageButtonClick);//注册点击事件
//LinkButton btn_Num = new LinkButton();
//btn_Num.Text = "1";
//btn_Num.CommandName = "1";
//btn_Num.Command += new CommandEventHandler(PageButtonClick);
Button_IndexPrevious.Text = ">> ";
Button_IndexPrevious.CommandName = "next";
Button_IndexPrevious.ForeColor = Color.Blue;
Button_IndexPrevious.Command += new CommandEventHandler(PageButtonClick);//注册点击事件
Button_IndexLast.Text = "Last ";
Button_IndexLast.CommandName = "last";
Button_IndexLast.ForeColor = Color.Blue;
Button_IndexLast.Command += new CommandEventHandler(PageButtonClick);
//label_Index.Text = "当前为第 " + (((GridView)sender).PageIndex + 1) + "页,共有 " + ((GridView)sender).PageCount + "页";
TableCell tmp = e.Row.Cells[0];// 读到系统的分页
tmp.Controls.Add(lbPre);
tmp.Controls.Add(Button_IndexFirst);//将几个按钮添加在系统分页后面
tmp.Controls.Add(Button_IndexNext);
GeneDigitNum(sender,tmp); //在'<<'与'>>'之间生成数字页码
//tmp.Controls.Add(btn_Num);
tmp.Controls.Add(Button_IndexPrevious);
tmp.Controls.Add(Button_IndexLast);
// tmp.Controls.Add(label_Index);
}
}
private void GeneDigitNum(object sender,TableCell tmp) {
GridView gv = (GridView)sender;
int index = (gv.PageIndex)*5 + 1;
int to =5*(gv.PageIndex+1);
for (int i = index; i <= to;i++ ) {
LinkButton lb = new LinkButton();
lb.Text = i.ToString();
lb.CommandName = i.ToString();
if (ValidataISDigist(i.ToString()))
{
tmp.Controls.Add(lb);
}
}
}
private string GenePre(object sender) {
GridView gv = (GridView)sender;
int nowPage=gv.PageIndex;
int pageSize = gv.PageSize;
//int x = gv.PageSize / nowPage;
//int x = System.Math.Round(totalPage * 1.0 / pageSize, 0);
int from = (nowPage % pageSize)*pageSize+1;
int to = from + (pageSize-1);
return from+"-"+to;
}
private string GenePage(object sender) {
GridView gv = (GridView)sender;
int to = gv.PageSize * (gv.PageIndex+1);
int from = to - (gv.PageSize - 1);
return from + "-" + to;
}
void PageButtonClick(object sender, EventArgs e)
{
GridView tmpGridView = (GridView)((((((LinkButton)sender).Parent).Parent).Parent).Parent);//寻找到Button的祖孙控件GridView
LinkButton clickedButton = ((LinkButton)sender);
string commandStr = clickedButton.CommandName;
if (!ValidataISDigist(commandStr))//if commandStr is not digit
{
switch (commandStr)
{
case "first":
tmpGridView.PageIndex = 0;
tmpGridView.DataBind();
break;
case "next":
if (tmpGridView.PageIndex < tmpGridView.PageCount - 1)
{
tmpGridView.PageIndex = tmpGridView.PageIndex + 1;
tmpGridView.DataBind();
}
else { clickedButton.Enabled = false; }
break;
case "previous":
if (tmpGridView.PageIndex >= 1)
{
tmpGridView.PageIndex -= 1;
tmpGridView.DataBind();
}
else { clickedButton.Enabled = false; }
break;
case "last":
tmpGridView.PageIndex = tmpGridView.PageCount - 1;
tmpGridView.DataBind();
clickedButton.Enabled = false;
break;
case "1":
tmpGridView.PageIndex = 0;
tmpGridView.DataBind();
break;
}
}
else {
int i = int.Parse(commandStr);
tmpGridView.PageIndex = i * tmpGridView.PageSize+1;
tmpGridView.DataBind();
}
}
private bool ValidataISDigist(string strCommand){
//string rex = "^\\d+{1}quot;;
string rex = @"^[0-9]*{1}quot;;
return Regex.IsMatch(strCommand, rex);
}
void _gridview_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
_gridview.PageIndex = e.NewPageIndex;
_gridview.DataBind();
}
}
}
前台演示代码:
protected void Page_Load(object sender, EventArgs e)
{
PagerManager pm = new PagerManager();
pm.doPaging(3,GridView1);
GridView1.DataSource = Data.BindData();
GridView1.DataBind();
}
有图有真相: