zoukankan      html  css  js  c++  java
  • 今天完成的自定义分页控件,支持AJAX.DLL的方式支持24种分页样式

    分页控件,大家应该都比较熟悉了。但是一直以来分页控件都给我一个很郁闷的地方,几乎都是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种样式的命名我改了下。有几个样式带横线,我把横线去掉了。

  • 相关阅读:
    canvas框架::createjs入门
    JS生成随机的由字母数字组合的字符串
    Meta标签中的format-detection属性及含义
    让iframe可编辑
    数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题
    开发常用链接
    idea备忘
    curl导入到postman后修改body数据Content-Length不变导致json数据解析失败
    maven-shade-plugin插件使用的注意事项
    解决服务器密码修改后mac终端ssh连接报错
  • 原文地址:https://www.cnblogs.com/dingdingmao/p/3146469.html
Copyright © 2011-2022 走看看