gridView分页控件

 
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();
          }


 

有图有真相:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值