zoukankan      html  css  js  c++  java
  • 分页控件

    public class page : System.Web.UI.WebControls.WebControl
     {
      public page()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
       // 已经解决中文参数问题。

      }
      private int _count;//每页显示的记录条数

      private int _CurrentPage;//当前页

      private int _allCount;//所有记录条数

      private int _showPages;//显示页数

      //以下脚本用于从文本框输入页码

      private const string SCRIPTSTRING = " \n";

      [DefaultValue(10),Category("Customer")]

      public int Count

      {
       set
       {
        if(value <= 0)

         _count = 1;

        else

         _count = value;

       }
       get
       {

        return _count;

       }

      }

      [DefaultValue(1),Category("Customer")]

      public int CurrentPage

      {

       set

       {

        if(value < 0)

         _CurrentPage = 1;

        else

         _CurrentPage = value;

       }

       get

       {

        return _CurrentPage;

       }

      }

      [DefaultValue(1),Category("Customer")]

      public int AllCount

      {

       get

       {

        return _allCount;

       }

       set

       {

        if(_allCount < 0)

         throw new Exception("记录总条数不能为负数");

        else

         _allCount = value;

       }

      }

      [DefaultValue(1),Category("Customer")]

      public int Pages//总页数

      {

       get

       {

        if(this._allCount % this._count > 0)

         return ((int)this._allCount / this._count) + 1;

        else

         return ((int)this._allCount / this._count);

       }

      }

      [DefaultValue(1),Category("Customer")]

      public int ShowPages

      {

       set

       {

        if(value > 0)

         _showPages = value;

        else

         _showPages = 9;

       }

       get

       {

        return _showPages;

       }

      }

      protected override void Render(HtmlTextWriter writer)

      {

       base.Render (writer);

       string leftInfo;

       StringBuilder centerInfo = new StringBuilder();

       //分页条分三部分,leftInfo是最左边的部分,用来显示当前页/总页数,每页显示的记录条数

       leftInfo = "页" + this.CurrentPage.ToString() + "/" +

        this.Pages.ToString() + "  " + "每页" + this.Count.ToString() + "条" + "  共" +

        this.AllCount.ToString() + "条";    

               

       //中间的部分是分页部分

       int min;//要显示的页面数最小值

       int max;//要显示的页面数最大值

       if(this.CurrentPage > this.Pages)//当前页必须小于最大页
       {
        this.CurrentPage = this.Pages;
       }

       if(this.CurrentPage % this.ShowPages == 0) //如果恰好整除
       {

        if(this.AllCount == 0)
        {
         min = this.CurrentPage;

         max = this.CurrentPage+this.ShowPages;
        }
        else if(this.AllCount <= (this.CurrentPage*this.Count))
        {
         min = this.CurrentPage-this.ShowPages + 1;

         max = this.CurrentPage;
        }
        else
        {
         min = this.CurrentPage-2;

         max = this.CurrentPage + this.ShowPages-2;
        }

       }

       else if(this.CurrentPage % this.ShowPages == 1 && this.CurrentPage >

        this.ShowPages )

       {

        if(this.AllCount <= (this.CurrentPage*this.Count))
        {
         min = (((int)this.CurrentPage / this.ShowPages ) - 1) *

          this.ShowPages +2;

         max = this.CurrentPage;
        }
        else
        {
         min = this.CurrentPage;

         max = this.CurrentPage+this.ShowPages;
        }

       }

       else

       {

        min = ((int)this.CurrentPage / this.ShowPages) * this.ShowPages +

         1;

        max = (((int)this.CurrentPage / this.ShowPages) +1) *

         this.ShowPages;

       }          

       string numberStr = " ";//循环生成数字序列部分

       string AbsUrl = String.Empty;//URL?左边的部分

       //处理中间含有中文出错的问题   怎么样处理格空?

       
       string temps;
       int tempi;
       if(this.Context.Request.Url.ToString().IndexOf("?")>0)
       {
        temps=this.Context.Request.Url.ToString().Replace(" ","20%");
        temps=temps.Substring(0,temps.IndexOf(""));
        for(tempi=0;tempi<this.Context.Request.QueryString.Count;tempi++)
        {
         if(tempi==0)
          temps=temps+"?"+this.Context.Request.QueryString.Keys[tempi].ToString()+"="+this.Context.Request.QueryString.Get(tempi).ToString();
         else
          temps=temps+"&"+this.Context.Request.QueryString.Keys[tempi].ToString()+"="+this.Context.Request.QueryString.Get(tempi).ToString();
        }
        
        AbsUrl=temps;
       }
       else
        AbsUrl = (this.Context.Request.Url.ToString());

       //处理参数出现中文错误结束


       if(AbsUrl.IndexOf("?") == -1)

       {              
        AbsUrl+="?";
       }

       else

       {
        string s=AbsUrl.Substring(AbsUrl.IndexOf("?"));
        s=s.ToLower();
        if(s.IndexOf("currentpage")==-1)      //不存在currentpage变量
        {
         AbsUrl+="&";
        }
        else         //多个参数时,currentpage必须放在最右边才能正确
        {
         AbsUrl=AbsUrl.Substring(0,AbsUrl.IndexOf("?"))+s.Substring(0,s.IndexOf("currentpage"));
        }
        
       }

       for(int i = min ; i <= max ; i++)

       {          

        if(i <= this.Pages)//只有不大于最大页才显示

        {

         if(this.CurrentPage == i)//如果是当前页,用斜体和红色显示

         {

          numberStr = numberStr + "<I style='color:red'>" + i.ToString() + "</I>" +"</a>" + "\n";


         }

         else

         {
          numberStr = numberStr + "<a href=" + AbsUrl + "CurrentPage=" + i.ToString() + ">" + i.ToString() +"</a>" + "\n";

         }

        }

       }

       //第一页,上一页,下一页,最后一页

       string First,Previous,Next,Last;
      
       if(CurrentPage<=1)

        First = "";

       else

        First = "<a href="+AbsUrl + "CurrentPage=1"+">";
       /////////

       if(CurrentPage <= 1)

        Previous="";

       else

        Previous = "<a href="+AbsUrl + "CurrentPage=" + (CurrentPage- 1).ToString()+">";

       /////////

       if(CurrentPage == this.Pages)
        
        Next="";

       else

        Next = "<a href="+AbsUrl + "CurrentPage=" + (CurrentPage + 1).ToString()+">";

       /////////
      
       if(CurrentPage==this.Pages)

        Last="";
       else

        Last = "<a href="+AbsUrl + "CurrentPage=" + this.Pages+">";

       /////////
       centerInfo.AppendFormat("<font face='Webdings' style='font-size:14px'>{0}9</a>{1}7</a></font>{2}<font face='Webdings' style='font-size:14px'>{3}8</a>{4}:</a></font>",First,Previous,numberStr,Next,Last);

       StringBuilder sb = new StringBuilder();//HTML字符串

       sb.AppendFormat("<table style = 'font-size:12px' border='0' cellpadding='0' cellspacing='0' width='100%'> \n " +

        "<tr>\n" +

        "<td width='30%' align='left'>{0}</td>\n" +

        "<td width='50%' align='right'>{1}</td>\n" +

        "<td width='20%' align='right'><input type='text' name='T1' size='4' style='border-bottom:solid 1pt gray;border-top :solid 1pt gray; border-left:solid 1pt gray;border-right:solid 1pt gray;'> \n    <input type='button' name='B1' size='6' value=go style='border-bottom:solid 1pt gray;border-top :solid 1pt gray; border-left:solid 1pt gray;border-right:solid 1pt gray;' onclick='go(T1,{2})'></td>\n" +

        "</tr>\n" +

        "</table>",leftInfo,

        centerInfo.ToString(),
          
        this.Pages);
       
       writer.Write(sb.ToString());

      }

      protected override void OnPreRender(EventArgs e)

      {
    //注册控件
       base.OnPreRender (e);

       if(!Page.IsClientScriptBlockRegistered("WEREW-332DFAF-FDAFDSFDSAFD"))

       {

        Page.RegisterClientScriptBlock("WEREW-332DFAF-FDAFDSFDSAFD",SCRIPTSTRING);

       }

      }
     }


    ===============================================================================
    以下的JS代码,和分页控件放在同一个页面上
    <script language="javascript">

       function go(ctrl,max)

       {

           if(ctrl.value >= 1 && ctrl.value<= max)

           {

              var url;
              var index;         
              var s;

              url = location.href;

              index = url.indexOf('?');

              if(index == -1)

       {              
        url=url+"?";
       }

       else

       {
       
        s=url.substring(url.indexOf("?"));    
        s=s.toLowerCase();
        if(s.indexOf("currentpage")==-1)      //不存在currentpage变量
        {
         url=url+"&";
        }
        else         //多个参数时,currentpage必须放在最右边才能正确
        {
         url=url.substring(0,url.indexOf("?"))+s.substring(0,s.indexOf("currentpage"));
        }
        
       }
              location.href = url + "currentPage=" + ctrl.value;       }

           else

           {

              alert("您输入的页码必须是符合页面要求的数字,最大值是:" + max);

              return false;

           }

       }
      </script>

  • 相关阅读:
    HDU:2767-Proving Equivalences(添边形成连通图)
    POJ:1330-Nearest Common Ancestors(LCA在线、离线、优化算法)
    HDU:1269-迷宫城堡(tarjan模板)
    Xml 丶json丶 C/S KVO 数据库 SQL 数据持久化 复杂对象 集合视图综合
    项目穿越记
    SDP (Session Description Protocol)
    shell脚本实现查找文件夹下重复的文件,并提供删除功能
    HDU 2896 病毒侵袭 (AC自动机)
    项目启动那些事儿
    C++ 完美破解九宫格(数独)游戏
  • 原文地址:https://www.cnblogs.com/discoverx/p/577921.html
Copyright © 2011-2022 走看看