GridView实现数字页码分页

最近项目中有一个需求,实现数字页面分页,还能动态的根据总页数显示页码,顿时SX了,寻思,琢磨了很久现把核心代码发布一下


 protected void PagerButton_Command(object sender, System.Web.UI.WebControls.CommandEventArgs e)
        {
            string commandStr = e.CommandName;
            if (!ValidataISDigist(commandStr))
            {
                switch (commandStr)
                {
                    case "begin":
                        this.GvShow.PageIndex = 0;
                        GeneNextNum(GvShow.PageIndex.ToString());
                         break;
                    case "before":
                        if (this.GvShow.PageIndex > 0)
                        {
                            this.GvShow.PageIndex -= 1;
                            GeneNextNum(GvShow.PageIndex.ToString());
                        }
                        ; break;
                    case "after":
                        if (this.GvShow.PageIndex < this.GvShow.PageCount - 1)
                        {
                            this.GvShow.PageIndex += 1;
                            string page= GvShow.PageIndex.ToString();
                            GeneNextNum(page);
                        }
                        ; break;
                    case "end":
                        this.GvShow.PageIndex = this.GvShow.PageCount - 1;
                        GeneNextNum(GvShow.PageIndex.ToString());
                        break;
                }
            }
            else {
                GeneNextNum(commandStr);
                GvShow.PageIndex = int.Parse(commandStr) - 1;
            }
            BindView();
            InitButtons();
        }
        //create digit num
        private void GeneNextNum(string commandStr)
        {

            int toPage = int.Parse(commandStr);
            int pageCount = GvShow.PageCount;
            //5 is stand for that every time show five digit buttons
            if (toPage < 5)
            {
                lb1.Text = 1.ToString();
                lb1.CommandName = lb1.Text;
                lb2.Text = 2.ToString();
                lb2.CommandName = lb2.Text;
                lb3.Text = 3.ToString();
                lb3.CommandName = lb3.Text;
                lb4.Text = 4.ToString();
                lb4.CommandName = lb4.Text;
                lb5.Text = 5.ToString();
                lb5.CommandName = lb5.Text;
            }
            else if(toPage<=GvShow.PageCount)
            {
                int div = toPage / 5;
                int mod = GvShow.PageCount % 5;

                lb1.Text = (div * 5).ToString();
                lb1.CommandName = lb1.Text;
                lb2.Text = (div * 5 + 1).ToString();
                lb2.CommandName = lb2.Text;
                lb3.Text = (div * 5 + 2).ToString();
                lb3.CommandName = lb3.Text;
                lb4.Text = (div * 5 + 3).ToString();
                lb4.CommandName = lb4.Text;
                lb5.Text = (div * 5 + 4).ToString();
                lb5.CommandName = lb5.Text;
                ShowOrHideLinkButton(false);
                //for (int i = 1; i <= mod;i++ ) {
                //    LinkButton lb = new LinkButton();
                //    lb.ID = "lb" + i;
                //    InitLinkButton(lb);
                //}
            }
           
        }
        private void InitLinkButton(LinkButton lb)
        {
            switch (lb.ID)
            {
                case "lb1":
                    lb1.Visible = true;
                    lb1.Enabled = true;
                    break;
                case "lb2":
                    lb2.Visible = true;
                    lb2.Enabled = true;
                    break;
                case "lb3":
                    lb3.Visible = true;
                    lb3.Enabled = true;
                    break;
                case "lb4":
                    lb4.Visible = true;
                    lb4.Enabled = true;
                    break;
                case "lb5":
                    lb5.Visible = true;
                    lb5.Enabled = true;
                    break;
            }
        }
        
        /// <summary>
        /// show or hide digit num
        /// </summary>
        /// <param name="flag"></param>
        private void ShowOrHideLinkButton(bool flag)
        {
            lb1.Visible = flag;
            lb1.Enabled = flag;
            lb2.Visible = flag;
            lb2.Enabled = flag;
            lb3.Visible = flag;
            lb3.Enabled = flag;
            lb4.Visible = flag;
            lb4.Enabled = flag;
            lb5.Visible = flag;
            lb5.Enabled = flag;
        }
        private bool ValidataISDigist(string strCommand)
        {
            string rex = @"^[0-9]*{1}quot;;
            return Regex.IsMatch(strCommand, rex);
        }
        private void InitButtons()
        {
            //int to = gv.PageSize * (gv.PageIndex + 1);
            //int from = to - (gv.PageSize - 1);
            //return from + "-" + to;

            //txtNowPage.Text = (this.GvShow.PageIndex + 1).ToString();
            //txtAllPage.Text = this.GvShow.PageCount.ToString();
            //txtTotal.Text = (GvShow.PageCount).ToString();
            //txtNowRed.Text = this.GvShow.PageSize.ToString();
            int to =GvShow.PageSize*(GvShow.PageIndex+1);
            int from=to-(GvShow.PageSize-1);
            txtNowPage.Text = from.ToString();
            txtAllPage.Text = to.ToString();
            txtTotal.Text = GvShow.PageCount.ToString();
            drpPageNumbers.SelectedValue = GvShow.PageIndex.ToString();

            this.cmdbegin.Enabled = false;
            this.cmdbefore.Enabled = false;
            this.cmdafter.Enabled = false;
            this.cmdend.Enabled = false;

            if (this.GvShow.PageCount > 1)
            {
                this.cmdbegin.Enabled = true;
                this.cmdbefore.Enabled = true;
                this.cmdafter.Enabled = true;
                this.cmdend.Enabled = true;

                if (this.GvShow.PageIndex == 0)
                {
                    this.cmdbegin.Enabled = false;
                    this.cmdbefore.Enabled = false;
                }
                else if (this.GvShow.PageIndex == this.GvShow.PageCount - 1)
                {
                    this.cmdafter.Enabled = false;
                    this.cmdend.Enabled = false;
                }
            }
            int quotient = GvShow.PageCount / 5;
            int mod = GvShow.PageCount % 5;
            //gridview page count is less than and equals to 5
            if (quotient == 0)
            {
                for (int i = 1; i <= GvShow.PageCount; i++)
                {
                    LinkButton lb = new LinkButton();
                    lb.ID = "lb" + i.ToString();
                    InitLinkButton(lb);
                }
            }

            else
            {

                ShowOrHideLinkButton(true);
            }

        }


后续会发布完整版
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值