【www.gdgbn.com--php常用代码】

一。对上一版本源代码的修正

上一篇文章发布了一个分页控件的源码,但是这个分页控件的设计时支持不太好,出现了“未处理的异常,输入字符串的格式不正确”的错误,如下图所示:

原因是一下代码引起的异常:

int pageCount = int.Parse(_lblPageCount.Text); //获取总页数

修改为以下代码后即显示正常,如图所示:

 



 if (_lblPageCount.Text == "")
                ...{
                    _lnkbtnLast.Enabled = false;
                }
                else
                ...{
                    int pageCount = int.Parse(_lblPageCount.Text); //获取总页数
                    if (PageIndex == pageCount)//如果当前页为最后一页,则末页灰显
                    ...{
                        _lnkbtnLast.Enabled = false;
                    }
                    else
                    ...{
                        _lnkbtnLast.Enabled = true;
                    }
                }

二、增加“自动套用格式”:

代码如下:

继承DesignerAutoFormat类,重写Apply(Control control)方法,实现两种样式,分别是“英文样式”和“符号样式”。



using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web.UI;
using System.Web;
using System.Web.UI.Design;
using System.Web.UI.Design.WebControls;
using System.Web.UI.WebControls;
using System.Drawing;
namespace CustomControls
...{
    public class AspNetPagerAutoFormat : DesignerAutoFormat
    ...{
        public AspNetPagerAutoFormat(string name) : base(name) ...{ }
        public override void Apply(Control control)
        ...{
            if (control is AspNetPager)
            ...{
                AspNetPager aspNetPager = (AspNetPager)control;
                if (this.Name == "英文样式")
                ...{
                    aspNetPager.ButtonText = "Go";
                    aspNetPager.FirstPageText = "First";
                    aspNetPager.PrePageText = "Prev";
                    aspNetPager.NextPageText = "Next";
                    aspNetPager.EndPageText = "End";
                    aspNetPager.LabelStyle.ForeColor = Color.Blue;
                    aspNetPager.LabelStyle.Font.Bold = true;
                    aspNetPager.TextBoxStyle.CssClass = "blue_rounded";
                    aspNetPager.TextBoxStyle.Width = Unit.Parse("50px");
                    aspNetPager.PageSize = 20;
                    aspNetPager.RecordCount = 0;
                }
                else if (this.Name == "符号样式")
                ...{
                    aspNetPager.ButtonText = "转到";
                    aspNetPager.FirstPageText = "9";
                    aspNetPager.PrePageText = "7";
                    aspNetPager.NextPageText = "8";
                    aspNetPager.EndPageText = ":";
                    aspNetPager.LabelStyle.ForeColor = Color.Red;
                    aspNetPager.LabelStyle.Font.Bold = true;
                    aspNetPager.TextBoxStyle.CssClass = "blue_rounded";
                    aspNetPager.TextBoxStyle.Width = Unit.Parse("40px");
                    aspNetPager.PageSize = 40;
                }
            }
            else
            ...{
                throw new Exception("The method or operation is not implemented.");
            }
        }
    }
}

其中套用”英文样式后效果如下:

套用“字符样式后效果如下:

三、数字分页效果的实现:

首先定义十个LinkButton,如下代码所示:

 



        private LinkButton _page_0;
        private LinkButton _page_1;
        private LinkButton _page_2;
        private LinkButton _page_3;
        private LinkButton _page_4;
        private LinkButton _page_5;
        private LinkButton _page_6;
        private LinkButton _page_7;
        private LinkButton _page_8;
        private LinkButton _page_9;

在CreateChildControls()方法中生成这些控件,并定义一个共同的点击事件“BtnChangePage_Click”,

 



 _page_0 = new LinkButton();
            _page_0.ID = "_page_0";
            _page_0.Click += new EventHandler(CurrentPage_Click);
            _page_1 = new LinkButton();
            _page_1.ID = "_page_1";
            _page_1.Click += new EventHandler(CurrentPage_Click);
            _page_2 = new LinkButton();
            _page_2.ID = "_page_2";
            _page_2.Click += new EventHandler(CurrentPage_Click);
            _page_3 = new LinkButton();
            _page_3.ID = "_page_3";
            _page_3.Click += new EventHandler(CurrentPage_Click);
            _page_4 = new LinkButton();
            _page_4.ID = "_page_4";
            _page_4.Click += new EventHandler(CurrentPage_Click);
            _page_5 = new LinkButton();
            _page_5.ID = "_page_5";
            _page_5.Click += new EventHandler(CurrentPage_Click);
            _page_6 = new LinkButton();
            _page_6.ID = "_page_6";
            _page_6.Click += new EventHandler(CurrentPage_Click);
            _page_7 = new LinkButton();
            _page_7.ID = "_page_7";
            _page_7.Click += new EventHandler(CurrentPage_Click);
            _page_8 = new LinkButton();
            _page_8.ID = "_page_8";
            _page_8.Click += new EventHandler(CurrentPage_Click);
            _page_9 = new LinkButton();
            _page_9.ID = "_page_9";
            _page_9.Click += new EventHandler(CurrentPage_Click);
            _txtPageIndex = new TextBox();
            _txtPageIndex.ID = "txtPageIndex";
            _lblPageSize = new Label();
            _lblPageSize.ID = "lblPageSize";
            this.Controls.Add(_page_0);
            this.Controls.Add(_page_1);
            this.Controls.Add(_page_2);
            this.Controls.Add(_page_3);
            this.Controls.Add(_page_4);
            this.Controls.Add(_page_5);
            this.Controls.Add(_page_6);
            this.Controls.Add(_page_7);
            this.Controls.Add(_page_8);
            this.Controls.Add(_page_9);

CurrentPage_Click事件的代码:

 



 protected void CurrentPage_Click(object sender, EventArgs e)
        ...{
            string strID = ((LinkButton)sender).ID;
            if (strID != "")
            ...{
                int pageIndex = 0;
                int pageNum = PageIndex / 10;
                try
                ...{
                    int pageNum2 = int.Parse(strID.Split(""_"")[2]);
                    if (pageNum2 == 0)
                        pageNum2 = 10;
                    pageIndex = pageNum2 + pageNum*10;
                }
                catch
                ...{
                    System.Web.HttpContext.Current.Response.Write("<script>alert(""非法的页码!"");</script>");
                    return;
                }
                _lblCurrentPage.Text = pageIndex.ToString();
                OnPageChanged(EventArgs.Empty);
            }
        }

然后绘制控件,根据总页数和当前页码显示10个数字页,比如当前页是23页,则显示21到30共十个页的页码。

 



if (_lblPageCount.Text == "")
            ...{
                for (int i = 0; i < 10; i++)
                ...{
                    LinkButton lb = (LinkButton)this.FindControl("_page_" + i.ToString());
                    lb.Enabled = false;
                    lb.Text = (i + 1).ToString();
                    lb.RenderControl(writer);
                    writer.Write(" ");

                }
            }
            else
            ...{
                int pageCount = int.Parse(_lblPageCount.Text);
                int quot = PageIndex / 10;
                int rema = PageIndex % 10;
                //PageNum = quot * 10;
                if (pageCount < 10 || pageCount - PageIndex < 10)
                ...{
                    for (int i = quot * 10 + 1; i <= pageCount; i++)
                    ...{
                        LinkButton lb2 = (LinkButton)this.FindControl("_page_" + (i % 10).ToString());
                        lb2.Text = i.ToString();
                        if (i == PageIndex)
                        ...{
                            lb2.Enabled = false;
                            lb2.Font.Bold = true;
                            lb2.ForeColor = Color.Red;
                        }
                        else
                        ...{
                            lb2.Enabled = true;
                        }
                        lb2.RenderControl(writer);
                        writer.Write(" ");
                    }
                }
                else
                ...{
                    for (int i = quot * 10 + 1; i <= quot * 10 + 10; i++)
                    ...{
                        LinkButton lb2 = (LinkButton)this.FindControl("_page_" + (i % 10).ToString());
                        lb2.Text = i.ToString();
                        if (i == PageIndex)
                        ...{
                            lb2.Enabled = false;
                            lb2.Font.Bold = true;
                            lb2.ForeColor = Color.Red;
                        }
                        else
                        ...{
                            lb2.Enabled = true;
                        }
                        lb2.RenderControl(writer);
                        writer.Write(" ");
                    }
                }
            }

设计时效果如下图所示:

分页效果如下:

控件的源码如下:

 



using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace CustomControls
...{
    [Designer(typeof(AspNetPagerDesigner)),ToolboxData("<{0}:AspNetPager runat=""server"" PageSize=""25"" FirstPageText=""首页"" PrePageText=""上一页"" NextPageText=""下一页"" EndPageText=""末页"" ButtonText=""GO"">")]
    public class AspNetPager : WebControl, INamingContainer
    ...{
 &

本文来源:http://www.gdgbn.com/jiaocheng/13020/