45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:ASP.NET实用的分页类(支持AJAX和自定义文字的类)

ASP.NET实用的分页类(支持AJAX和自定义文字的类)

2015-07-15 14:21:23 来源:www.45fan.com 【

ASP.NET实用的分页类(支持AJAX和自定义文字的类)

在做网站没用 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;
 
  }
 
 }
 
}

本文地址:http://www.45fan.com/bcdm/14567.html
Tags: 支持 简单 ASP.NET
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部