zoukankan      html  css  js  c++  java
  • 自己开发的自定义分页控件

    一直以来都觉得分页是麻烦的事情,.NET中虽然有DATAGRID的分页,但用其他形式的列表仍然需要使用到分页,一次一次的写不利于效率及面向对象的方法,用类或用户控件也总觉得怪怪的,用第3方的自己觉得不放心,也不利于自己进行修改,干脆就自己写了一个。
    (另外注意:在控件编译时,可以在AssemblyInfo.cs文件中设置控件的标签和名称空间,如:
    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Web.UI;

    [assembly: TagPrefix("PublicControls","PublicControls")]  // 自定义控件前缀
    第一个参数是名称空间(必须是你的控件类的名称空间),第二个是标签名(可自定义)
    记得要加入System.Web.UI;名称空间,另外 将控件类内的
         [DefaultProperty("Text"),
         ToolboxData("<PublicControls:PageNavigation runat=server></PublicControls:PageNavigation>")]这句屏蔽掉
    )

    所有代码如下:

    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.ComponentModel;
    using System.Collections;
    using System.Collections.Specialized;
     
     
     
    namespace PublicControls
    {
         ///<summary>
         /// PageNavigation 分页导航控件。
         ///</summary>
         [DefaultProperty("Text"),
         ToolboxData("<PublicControls:PageNavigation runat=server></PublicControls:PageNavigation>")]
         public class PageNavigation : Control,IPostBackDataHandler,IPostBackEventHandler
         {
             #region预定义
            
             private string _style;
             private int _count;
             private int _pagesize;
             private int _pageindex;
            private int _pages;         //页群
             private int _currentpages;
             private string _first;
             private string _pres;
             private string _pre;
             private string _next;
             private string _nexts;
             private string _last;
     
     
             ///<summary>
             ///委托页面索引事件
             ///</summary>
             public event EventHandler PageIndexChange;
     
             #endregion
     
             #region属性
            
             ///<summary>
             ///相关属性样式字符串属性
             ///</summary>
             [Bindable(false),
             Category("StyleString"),
             DefaultValue("Align=left")]
             public string StyleString
             {
                  get
                  {
                       _style = (string)ViewState["StyleString"];
                       return _style;
                  }
     
                  set
                  {
                       _style= value;
                       ViewState["StyleString"] = _style;
                  }
             }
     
             ///<summary>
             ///记录总数
             ///</summary>
             [Bindable(false),
             Category("Count"),
             DefaultValue(0)]
             public int Count
             {
                  get
                  {
                       if (this.IsNumeric(ViewState["Count"]))
                       {
                           _count = (int)ViewState["Count"];
                       }
                       return _count;
                  }
     
                  set
                  {
                       _count = value;
                       ViewState["Count"] = _count;
                      
                  }
             }
     
             ///<summary>
             ///页面大小
             ///</summary>
             [Bindable(false),
             Category("Pagesize"),
             DefaultValue(10)]
             public int Pagesize
             {
                  get
                  {
                      
                       if (this.IsNumeric(ViewState["Pagesize"]))
                       {
                           _pagesize = (int)ViewState["Pagesize"];
                       }
                       return _pagesize;
                  }
     
                  set
                  {
                       _pagesize = value;
                       ViewState["Pagesize"] = _pagesize;
                      
                  }
             }
     
             ///<summary>
             ///当前页索引
             ///</summary>
             [Bindable(false),
             Category("Pageindex"),
             DefaultValue(0)]
             public int Pageindex
             {
                  get
                  {
                       if (this.IsNumeric(ViewState["Pageindex"]))
                       {
                           _pageindex = (int)ViewState["Pageindex"];
                       }
                       return _pageindex;
                  }
     
                  set
                  {
                       _pageindex = value;
                       ViewState["Pageindex"] = _pageindex;
                  }
             }
     
             ///<summary>
             ///页群属性
             ///</summary>
             public int Pages
             {
                  get
                  {
                       if (this.IsNumeric(ViewState["Pages"]))
                       {
                           _pages = (int)ViewState["Pages"];
                       }
                       return _pages;
                  }
                  set
                  {
                       _pages = value;
                       ViewState["Pages"] = _pages;
                  }
             }
     
             ///<summary>
             ///当前页群索引
             ///</summary>
             public int CurrentPages
             {
                  get
                  {
                       if (this.IsNumeric(ViewState["CurrentPages"]))
                       {
                           _currentpages = (int)ViewState["CurrentPages"];
                       }
                       return _currentpages;
                  }
                  set
                  {
                       _currentpages = value;
                       ViewState["CurrentPages"] = _currentpages;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("first"),
             DefaultValue("第一页")]
             public string First
             {
                  get
                  {
                       _first = (string)ViewState["First"];
                       return _first;
                  }
     
                  set
                  {
                       _first = value;
                       ViewState["First"] = _first;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("pres"),
             DefaultValue("前N页")]
             public string Pres
             {
                  get
                  {
                       _pres = (string)ViewState["Pres"];
                       return _pres;
                  }
     
                  set
                  {
                       _pres = value;
                       ViewState["Pres"] = _pres;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("pre"),
             DefaultValue("前一页")]
             public string Pre
             {
                  get
                  {
                       _pre = (string)ViewState["Pre"];
                       return _pre;
                  }
     
                  set
                  {
                       _pre = value;
                       ViewState["Pre"] = _pre;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("next"),
             DefaultValue("后一页")]
             public string Next
             {
                  get
                  {
                       _next = (string)ViewState["Next"];
                       return _next;
                  }
     
                  set
                  {
                       _next = value;
                       ViewState["Next"] = _next;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("nexts"),
             DefaultValue("后N页")]
             public string Nexts
             {
                  get
                  {
                       _nexts = (string)ViewState["Nexts"];
                       return _nexts;
                  }
     
                  set
                  {
                       _nexts = value;
                       ViewState["Nexts"] = _nexts;
                  }
             }
     
             ///<summary>
             ///标记样式
             ///</summary>
             [Bindable(false),
             Category("last"),
             DefaultValue("最后一页")]
             public string Last
             {
                  get
                  {
                       _last = (string)ViewState["Last"];
                       return _last;
                  }
                  set
                  {
                       _last = value;
                       ViewState["Last"] = _last;
                  }
             }
     
     
             #endregion
     
             #region事件
             ///<summary>
             ///当由类实现时,使服务器控件能够处理将窗体发送到服务器时引发的事件。
             ///</summary>
             ///<param name="e">所传递的参数</param>
             public void RaisePostBackEvent(string e)
             {
                  //当发生回送的时候改变控件当前索引
                  if(e=="top")
                  {
                       Pageindex = 0;
                       CurrentPages = 0 ;
                  }
                  else if(e=="last")
                  {
                       Pageindex = (Count+Pagesize-1)/Pagesize -1;
                      
                       CurrentPages = ((Count+Pagesize-1)/Pagesize+Pages-1)/ Pages -1;
     
                       if(Pageindex<0)
                       {
                           Pageindex=0;
                       }
                       if(CurrentPages<0)
                       {
                           CurrentPages=0;
                       }
                      
                  }
                  else if(e=="pre")
                  {
                       if(Pageindex>0)
                       {
                           Pageindex--;
                           if(Pageindex<CurrentPages*Pages && Pageindex>0)
                           {
                                CurrentPages--;
                           }
                       }
                  }
                  else if(e=="next")
                  {
                       if(Pageindex<(Count+Pagesize-1)/Pagesize -1)
                       {
                           Pageindex++;
                           if(Pageindex>(CurrentPages+1)*Pages-1 && Pageindex<Count-1)
                           {
                                CurrentPages++;
                           }
                       }
                  }
                  else if(e=="pres")
                  {
                       Pageindex -= Pages;
                       if(Pageindex<0)
                       {
                           Pageindex = 0;
                       }
                       if(Pageindex<CurrentPages*Pages && Pageindex>0)
                       {
                           CurrentPages--;
                       }
                  }
                  else if(e=="nexts")
                  {
                       Pageindex += Pages;
                       if(Pageindex>(Count+Pagesize-1)/Pagesize -1)
                       {
                           Pageindex = (Count+Pagesize-1)/Pagesize -1;
                       }
                       if(Pageindex>(CurrentPages+1)*Pages-1 && Pageindex<Count-1)
                       {
                           CurrentPages++;
                       }
                  }
                  else
                  {
                       Pageindex = int.Parse(e.ToString());
                  }
            
                  //发生回送事件时引发OnPageIndexChange事件
                  OnPageIndexChange(System.EventArgs.Empty);
             }
     
             ///<summary>
             ///当由类实现时,为 ASP.NET 服务器控件处理回发数据。
             ///</summary>
             ///<param name="postDataKey">数据集合元素索引</param>
             ///<param name="values">string 的排序集合</param>
             ///<returns></returns>
             public bool LoadPostData(string postDataKey, NameValueCollection values)
             {
                  //Pageindex = Int32.Parse(values[this.UniqueID].Split('|')[0]);
                  //CurrentPages = Int32.Parse(values[this.UniqueID].Split('|')[1]);
                  return false;
             }
     
             ///<summary>
             ///当由类实现时,用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。
             ///</summary>
             public void RaisePostDataChangedEvent()
             {
             }
     
             ///<summary>
             ///当页面索引改变,触发委托
             ///</summary>
             ///<param name="e"></param>
             protected void OnPageIndexChange(System.EventArgs e)
             {   
                  //委托给加载控件页的PageIndexChange事件
                  if (PageIndexChange!=null)
                  {
                       PageIndexChange(this,e);
                  }
             }
     
             ///<summary>
             ///预呈现
             ///</summary>
             ///<param name="e"></param>
             protected override void OnPreRender(EventArgs e)
             {
             }
     
             #endregion
     
             #region输出
             ///<summary>
             ///将此控件呈现给指定的输出参数。
             ///</summary>
             ///<param name="output">要写出到的 HTML 编写器 </param>
             protected override void Render(HtmlTextWriter output)
             {
     
                  string Pagestring = "";  //定义页码呈现字符串
                  string Text = null;          //输出主结构字符串变量定义
                  int NO;
     
                  //输出主结构
                  Text = "<div $style$>";
                 
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"top")+ "/">"+First+"</a>&nbsp;";
     
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"pres")+ "/">"+Pres+"</a>&nbsp;";
     
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"pre")+ "/">"+Pre+"</a>&nbsp;";
     
                  Text +="$Pagestring$";
     
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"next")+ "/">"+Next+"</a>&nbsp;";
     
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"nexts")+ "/">"+Nexts+"</a>&nbsp;";
                 
                  Text +="<a href =/"javascript:"+ Page.GetPostBackEventReference(this,"last")+ "/">"+Last+"</a>&nbsp;";
     
                  Text +="</div>";//<input type = hidden name ="+this.UniqueID+" value = "+this.Pageindex+"|"+this.CurrentPages+">";    
     
                  //当页大小小于0时,还原为1,防止预算出现除0错误
                  if (!(Pagesize>0))
                  {
                       Pagesize = 1;
                  }
                 
                 
     
                  //计算出总页数,并循环输出页码
                  for (int i = 0;i< Pages ;i++ )
                  {
                       //获得页群内页码
                       NO = Pages * CurrentPages + i;
     
                       if(NO<(Count+Pagesize-1)/Pagesize)
                       {
                           //判断页码是否为当前页
                           if (Pageindex != NO)
                           {
                                Pagestring += "<a href = /"javascript:"+ Page.GetPostBackEventReference(this,NO.ToString())+ "/">"+(NO+1).ToString()+"</a>&nbsp;";
                           }
                                //如果不是,页面部分无连接
                           else
                           {
                                Pagestring += (NO+1).ToString()+"&nbsp;";
                           }
                       }
                  }
     
                  if (!(Pagestring.Trim().Length>0))
                  {
                       Pagestring = "1";
                  }
                 
                  //替换对齐属性
                  Text = Text.Replace("$style$",StyleString);
               
                  //替换页码部分
                  Text = Text.Replace("$Pagestring$",Pagestring);
                 
     
                  output.Write(Text);
                 
             }
             #endregion
     
             #region其他函数
             ///<summary>
             ///判断是否为数字字符串
             ///</summary>
             ///<param name="str">需验证的字符串</param>
             ///<returns>判断结果,符合条件为True,不符合条件为False</returns>
             public bool IsNumeric(string str)
             {
                  //判断是否为空
                  if (str == null || str.Length==0)
                  {
                       return false;
                  }
                  //循环检查每个字符
                  foreach(char c in str)
                  {
                       if (!Char.IsNumber(c))
                       {
                           return false;
                       }
                  }
                  return true;
             }
     
             ///<summary>
             ///判断是否为数字字符串
             ///</summary>
             ///<param name="obj">需验证的字符串</param>
             ///<returns>判断结果,符合条件为True,不符合条件为False</returns>
             public bool IsNumeric(object obj)
             {
     
                  obj += "";
                  string str = obj.ToString();
                 
                  //判断是否为空
                  if (str == null || str.Length==0)
                  {
                       return false;
                  }
                  //循环检查每个字符
                  foreach(char c in str)
                  {
                       if (!Char.IsNumber(c))
                       {
                           return false;
                       }
                  }
                  return true;
             }
     
             #endregion
         }
    }
     
  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 洁净数
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    20. Valid Parentheses
    290. Word Pattern
    205. Isomorphic Strings
    71. Simplify Path
  • 原文地址:https://www.cnblogs.com/ZetaChow/p/2237446.html
Copyright © 2011-2022 走看看