今天完成的自定义分页控件,支持AJAX.DLL的方式支持24种分页样式

来源:互联网 发布:澳洲建筑系排名知乎 编辑:程序博客网 时间:2024/06/07 01:03

分页控件,大家应该都比较熟悉了。但是一直以来分页控件都给我一个很郁闷的地方,几乎都是URL传值,让人很郁闷。

如果我的是高级查询,里面的值有很多,那写死个人。同时对系统的请求也是一个考验。于是我写了这个分页控件。同时支持24种分页样式。

代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel;using System.Web.UI.HtmlControls;namespace MyControl{    [DefaultProperty("Text")]    [ToolboxData("<{0}:DataPager runat=server></{0}:DataPager>")]    public class DataPager : WebControl, INamingContainer, IPostBackEventHandler    {        public event EventHandler PagerOnclick        {            add            {                Events.AddHandler(this, value);            }            remove            {                Events.RemoveHandler(this, value);            }        }        protected void _PagerClick(object sender, EventArgs e)        {            EventHandler hd = (EventHandler)base.Events[this];            if (hd != null)            {                hd(sender, e);            }        }        public void RaisePostBackEvent(string Index)        {            //Label lbl = (Label)this.FindControl("lbl");            //lbl.Text += "自己的事件:" + Index;        }        void btn_Click(object sender, EventArgs e)        {            try            {                int pageIndex = int.Parse(((sender) as LinkButton).Text);                this.PageIndex = pageIndex;                _PagerClick(sender, e);            }            catch (Exception) { }        }        /// <summary>        /// 当前页数        /// </summary>        public int PageIndex        {            get { return int.Parse(ViewState["PageIndex"] == null ? "1" : ViewState["PageIndex"].ToString()); }            set            {                ViewState["PageIndex"] = value;                CreateChildControls();            }        }        /// <summary>        /// 总的页数        /// </summary>        public int TotalPage        {            get { return int.Parse(ViewState["TotalPage"] == null ? "1" : ViewState["TotalPage"].ToString()); }            set { ViewState["TotalPage"] = value; }        }        /// <summary>        /// 总的记录数        /// </summary>        public int TotalRecord        {            get { return int.Parse(ViewState["TotalRecord"] == null ? "0" : ViewState["TotalRecord"].ToString()); }            set { ViewState["TotalRecord"] = value; }        }        /// <summary>        /// 每页数据大小        /// </summary>        public int PageSize        {            get { return int.Parse(ViewState["PageSize"] == null ? "0" : ViewState["PageSize"].ToString()); }            set { ViewState["PageSize"] = value; }        }        /// <summary>        /// 自定义说明        /// </summary>        public string CustomText        {            get { return ViewState["CustomText"] == null ? "" : ViewState["CustomText"].ToString(); }            set { ViewState["CustomText"] = value; }        }        void NextPager(object send, EventArgs e)        {            this.PageIndex = this.PageIndex + 10 > this.TotalPage ? this.TotalPage : this.PageIndex + 10;        }        void PrePager(object send, EventArgs e)        {            this.PageIndex = this.PageIndex-10 > 1 ? this.PageIndex - 10 : 1;        }        void MaxPager(object send, EventArgs e)        {            this.PageIndex = this.TotalPage;        }        protected override void CreateChildControls()        {            this.Controls.Clear();            HtmlGenericControl div = new HtmlGenericControl("div");            div.Attributes.Add("class", "pagingbar");            this.Controls.Add(div);            HtmlGenericControl divbadoo = new HtmlGenericControl("div");            divbadoo.Attributes.Add("class", _displayStyle);            div.Controls.Add(divbadoo);            int StarDisplayPage = PageIndex-4;            int EndDisplayPage = PageIndex+5;            if (PageIndex <= 5)             {                StarDisplayPage = 1;                EndDisplayPage = 10;            }            if (PageIndex>5)             {                LinkButton labPrev = new LinkButton();                labPrev.Text = "< Prev";                labPrev.Click += PrePager;                labPrev.CssClass = "disabled";                divbadoo.Controls.Add(labPrev);                LinkButton button = new LinkButton();                button.Click += btn_Click;                button.Text = "1";                divbadoo.Controls.Add(button);                Label labMore = new Label();                labMore.Text = "...";                divbadoo.Controls.Add(labMore);            }            if (PageIndex >= TotalPage-5)            {                StarDisplayPage = (TotalPage - 10 <= 0) ? 1:TotalPage - 10;                EndDisplayPage = TotalPage;            }            for (int i = StarDisplayPage; i <= EndDisplayPage; i++)            {                if (i == PageIndex)                {                    Label labCurrent = new Label();                    labCurrent.Text = i.ToString();                    labCurrent.CssClass = "current";                    divbadoo.Controls.Add(labCurrent);                }                else                {                    LinkButton button = new LinkButton();                    button.Click += btn_Click;                    button.Text = i.ToString();                    divbadoo.Controls.Add(button);                }            }            if (PageIndex < TotalPage - 5)            {                Label labOmission = new Label();                labOmission.Text = "...";                divbadoo.Controls.Add(labOmission);                LinkButton btnLastPage = new LinkButton();                btnLastPage.Text = this.TotalPage.ToString();                btnLastPage.Click += btn_Click;                divbadoo.Controls.Add(btnLastPage);                LinkButton btnNextPage = new LinkButton();                btnNextPage.Text = "Next >";                btnNextPage.Click += NextPager;                divbadoo.Controls.Add(btnNextPage);            }        }        protected override void Render(HtmlTextWriter output)        {            if ((base.Site != null) && base.Site.DesignMode)            {                StringBuilder sb = new StringBuilder();                sb.Append("<div id=\"pagingbar\" class=\"pagingbar\">");                sb.Append("<div class=\"badoo\">");                sb.Append("<span class=\"disabled\">< Prev </span>");                sb.Append("<span class=\"current\">1</span>");                sb.Append("<a>2</a>");                sb.Append("<a>3</a>");                sb.Append("<a>4</a>");                sb.Append("<a>5</a>");                sb.Append("<a>6</a>");                sb.Append("<a>7</a>");                sb.Append("<a>8</a>");                sb.Append("<a>9</a>");                sb.Append("...");                sb.Append("<a>n</a>");                sb.Append("<a> Next ></a>");                sb.Append("</div>");                sb.Append("</div>");                output.Write(sb.ToString());            }            else            {                base.Render(output);            }        }        private string _displayStyle        {            get { return ViewState["DisplayStyle"] == null ? "badoo" : ViewState["DisplayStyle"].ToString(); }        }        /// <summary>        /// 设置的样式        /// </summary>        public DisplayStyle SelectDisplayStyle         {            set             {                if (ViewState["DisplayStyle"]==null)                {                    ViewState["DisplayStyle"] = value.ToString();                }            }        }        public string SetDisplayStyle         {            set            {                ViewState["DisplayStyle"] = value;            }        }         public enum DisplayStyle         {            digg,            yahoo,            meneame,            flickr,            sabrosus,            pagination,            scott,            quotes,            black,            black2,            blackRed,            grayr,            yellow,            jogger,            starcraft2,            tres,            megas512,            technorati,            youtube,            msdn,            badoo,            greenBlack,            viciao,            yahoo2,        }    }}

你可以选择手动或者自动输入样式,当两个样式都有的时候使用手动设置的样式。

同时,点击页数的事件 直接赋值 或者点击写都可以

前台调用代码如下:

  <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">             <ContentTemplate>                <cc1:DataPager ID="DataPager2" runat="server"  SelectDisplayStyle="flickr"  OnPagerOnclick="DataPager1_PagerOnclick1" />                  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>            </ContentTemplate>      </asp:UpdatePanel>

CS代码:

    protected void Page_Load(object sender, EventArgs e)    {        if(!IsPostBack)        {            //this.PagingBar1 = new MyControl.PagingBar();            this.DataPager1.PageIndex = 5;            this.DataPager1.PageSize = 20;            this.DataPager1.TotalPage = 30;            this.DataPager1.TotalRecord = 500;            this.DataPager2.PageIndex = 5;            this.DataPager2.PageSize = 20;            this.DataPager2.TotalPage = 30;            this.DataPager2.TotalRecord = 500;            //this.DataPager1.        }    }      protected void DataPager1_PagerOnclick1(object sender, EventArgs e)    {        //int PageIndex = this.DataPager1.PageIndex;        int strthisPage = DataPager2.PageIndex;   //Convert.ToInt32(((sender) as LinkButton).Text);       // this.DataPager1.PageIndex = strthisPage;        Label1.Text = strthisPage.ToString();    }
对了,24种样式的命名我改了下。有几个样式带横线,我把横线去掉了。