欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简单好用的ASP.NET分页类(支持AJAX、自定义文字)

程序员文章站 2024-02-21 08:18:58
在做网站没用 js ui控件时 很实用 用法: var ps=new pagestring(); /*可选参数*/ ps.setisengl...

在做网站没用 js ui控件时 很实用

用法:

var ps=new pagestring();
 
 /*可选参数*/
 
 ps.setisenglish = true;// 是否是英文    (默认:false)
 ps.setisshowtext = true;//是否显示分页文字 (默认:true)
 //ps.textformat=""             (默认值:《span class=\"pagetext\"》《strong》总共《/strong》:{0} 条 《strong》当前《/strong》:{1}/{2}《/span》)
 //ps.setpageindexname request["pageindex"](默认值:"pageindex")
 ps.setisajax = false;//          (默认值:"false")
 
 /*函数参数*/
 int total = 10000;
 int pagesize = 10;
 int pageindex = convert.toint32(request["pageindex"]);
 
 var page = ps.tostring(total, pagesize, pageindex, "/ui/pagestringtest.aspx?");
 
 //获取 page html 输出
response.write(page);

效果:
简单好用的ASP.NET分页类(支持AJAX、自定义文字)

代码:

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.text.regularexpressions;
 
namespace syntacticsugar
{
  /// <summary>
  /// ** 描述:分页类
  /// ** 创始时间:2015-5-29
  /// ** 修改时间:-
  /// ** 作者:sunkaixuan
  public class pagestring
  {
    /// <summary>
    /// 是否是英文   (默认:false)
    /// </summary>
    public bool setisenglish { get; set; }
    /// <summary>
    /// 是否显示分页文字(默认:true)
    /// </summary>
    public bool setisshowtext { get; set; }
    /// <summary>
    /// 样式      (默认:"pagination")
    /// </summary>
    public string setclassname { get; set; }
    /// <summary>
    /// 分页参数名   (默认:"pageindex")
    /// </summary>
    public string setpageindexname { get; set; }
    /// <summary>
    /// 是否是异步 同步 href='' 异步 onclick=ajaxpage()  (默认:false)
    /// </summary>
    public bool setisajax { get; set; }
 
    /// <summary>
    /// 自定义文字
    /// string.format("{0}{1}{2}","总记录数","当前页数","总页数")
    /// 默认值:《span class=\"pagetext\"》《strong》总共《/strong》:{0} 条 《strong》当前《/strong》:{1}/{2}《/span》
    /// </summary>
    public string settextformat { get; set; }
 
    public pagestring()
    {
      setisenglish = false;
      setisshowtext = true;
      settextformat = "<span class=\"pagetext\"><strong>总共</strong>:{0} 条 <strong>当前</strong>:{1}/{2}</span> ";
      setclassname = "pagination";
      setpageindexname = "pageindex";
      setisajax = false;
    }
 
    /*免费的样式
    .pagination .click {cursor:pointer}
    .pagination a{text-decoration: none;border: 1px solid #aae;color: #15b;font-size: 13px;border-radius: 2px;}
    .pagination span{ color:#666;font-size:13px;display: inline-block;border: 1px solid #ccc;padding: 0.2em 0.6em;}
    .pagination span.pagetext{ border:none}
    .pagination a:hover{background: #26b;color: #fff;}
    .pagination a{display: inline-block;padding: 0.2em 0.6em;}
    .pagination .page_current{background: #26b;color: #fff;border: 1px solid #aae;margin-right: 5px;}
    .pagination{margin-top: 20px;}
    .pagination .current.prev, .pagination .current.next{color: #999;border-color: #999;background: #fff;}
     * */
 
    /// <summary>
    /// 分页算法<一>共20页 首页 上一页 1 2 3 4 5 6 7 8 9 10 下一页 末页
    /// </summary>
    /// <param name="total">总记录数</param>
    /// <param name="pagesize">每页记录数</param>
    /// <param name="pageindex">当前页数</param>
    /// <param name="query_string">url参数</param>
    /// <returns></returns>
    public string tostring(int total, int pagesize, int pageindex, string query_string)
    {
 
      int allpage = 0;
      int next = 0;
      int pre = 0;
      int startcount = 0;
      int endcount = 0;
      stringbuilder pagestr = new stringbuilder();
      pageindex = pageindex == 0 ? 1 : pageindex;
      pagestr.appendformat("<div class=\"{0}\" >", setclassname);
      if (pageindex < 1) { pageindex = 1; }
      //计算总页数
      if (pagesize != 0)
      {
        allpage = (total / pagesize);
        allpage = ((total % pagesize) != 0 ? allpage + 1 : allpage);
        allpage = (allpage == 0 ? 1 : allpage);
      }
      next = pageindex + 1;
      pre = pageindex - 1;
      startcount = (pageindex + 5) > allpage ? allpage - 9 : pageindex - 4;//中间页起始序号
      //中间页终止序号
      endcount = pageindex < 5 ? 10 : pageindex + 5;
      if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
      if (allpage < endcount) { endcount = allpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
 
      bool isfirst = pageindex == 1;
      bool islast = pageindex == allpage;
 
      if (setisshowtext)
        pagestr.appendformat(settextformat, total, pageindex, allpage);
 
      if (isfirst)
      {
        pagestr.append("<span>首页</span> <span>上一页</span>");
      }
      else
      {
        pagestr.appendformat("<a href=\"{0}pageindex=1\">首页</a> <a href=\"{0}pageindex={1}\">上一页</a>", query_string, pre);
      }
      //中间页处理,这个增加时间复杂度,减小空间复杂度
      for (int i = startcount; i <= endcount; i++)
      {
        bool iscurent = pageindex == i;
        if (iscurent)
        {
          pagestr.append(" <a class=\"page_current\">" + i + "</a>");
        }
        else
        {
          pagestr.append("  <a href=\"" + query_string + "pageindex=" + i + "\">" + i + "</a>");
        }
 
      }
      if (islast)
      {
        pagestr.append("<span>下一页</span> <span>末页</span>");
      }
      else
      {
        pagestr.append(" <a href=\"" + query_string + "pageindex=" + next + "\">下一页</a> <a href=\"" + query_string + "pageindex=" + allpage + "\">末页</a>");
      }
      pagestr.appendformat("</div>");
      return conversiondata(pagestr.tostring());
    }
 
    private string conversiondata(string page)
    {
      if (setisenglish)
      {
        page= page.replace("上一页", "previous").replace("下一页", "next").replace("总共", "total").replace("当前", "current").replace("条", "records").replace("首页", "first").replace("末页", "last");
      }
      if (setisajax)
      {
        var matches = regex.matches(page, @"href\="".*?""",regexoptions.singleline);
        if (matches != null && matches.count > 0)
        {
          foreach (match m in matches)
          {
            page = page.replace(m.value, string.format("class=\"click\" onclick=\"ajaxpage('{0}')\"", regex.match(m.value, string.format(@"{0}\=(\d+)", setpageindexname)).groups[1].value));
          }
        }
      }
      return page;
 
    }
 
  }
 
}