简单好用的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);

效果:

代码:

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;

    }

  }

}
(0)

相关推荐

  • ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

    1.扩展HtmlHelper类方法ShowPageNavigate public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount) { var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath; page

  • ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)

    ASP.NET MVC中进行分页的方式有多种,但在NuGet上使用最广泛的就是用PagedList.X.PagedList.Mvc进行分页.(原名为:PagedList.Mvc,但是2014年开始,作者将项目名称改名字为"X.PagedList.Mvc"),用这个插件的话会非常便利,大家可以试试,接下来将给大家讲下如何安装这个NuGet插件. ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(原名为PagedList.Mvc) 1.工具--NuGet 程序包管理

  • 分享一个asp.net pager分页控件

    效果: js: 复制代码 代码如下: $.fn.extend({ JPager: function (cfg, pageIndex, pageSize) { if (cfg && pageIndex > 0 && pageSize>0) { var token = "#" + this.attr("id"); this.empty(); var pageFirst = function () { $(token).JPag

  • asp.net中使用自定义控件的方式实现一个分页控件的代码

    一.概述 在web开发中,常常需要显示一些数据,而为了方便排版及浏览,我们只需要显示所有记录中的一部分.一般情况下,我们采用分页来实现这个需求.实现分页的方法多种多样,在本文中,我们采用了一个分页空间来记录记录总数.当前页.总页数及页面大小等.为了有一个直观上的印象,先展示该控件运行后的效果,效果如下图所示: 二.实现方案 为了实现该效果图,在asp.net中,可以使用Custom Controls and User Controls两种方式,User Controls的实现方式及其简单,而且使

  • asp.net自定义分页控件示例

    一..ascx页面 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pagination.ascx.cs" Inherits="IOCS.WEB.UserControl.Pagination" %><link href="../Content/Css/Pager.css" rel="s

  • 一个Asp.Net的显示分页方法 附加实体转换和存储过程 带源码下载

    之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnetpager写了一个精简实用的返回分页显示的html方法,其他话不说了,直接上代码.分页显示信息的实体类: 复制代码 代码如下: public class Pager    {        private string _firstPageText;        /// <summary>   

  • Asp.Net数据控件引用AspNetPager.dll分页实现代码

    1.也许讲解有点初级,希望高手不要"喷"我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13,小生不才: 2.如有什么不对的地方,还希望大家指出,一定虚心学习: 3.本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢. 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址 AspNetPager.rar第二步:在项目的bin文件夹下引用AspNetPager.dll 如图: 第三步:在工具箱添加AspNetPager控件,如图: 接下来再如图: 这样

  • asp.net利用后台实现直接生成html分页的方法

    本文实例讲述了asp.net利用后台实现直接生成html分页的方法,是一个比较实用的功能.分享给大家供大家参考之用.具体方法如下: 1.建立存储过程: ALTER procedure [dbo].[p_news_query] @Page int as begin select top 5 new_id,new_title,new_url,new_content_text,create_time,user_name from (select *,ROW_NUMBER() over(order by

  • asp.net中如何调用sql存储过程实现分页

    首先看下面的代码创建存储过程 1.创建存储过程,语句如下: CREATE PROC P_viewPage @TableName VARCHAR(200), --表名 @FieldList VARCHAR(2000), --显示列名,如果是全部字段则为* @PrimaryKey VARCHAR(100), --单一主键或唯一值键 @Where VARCHAR(2000), --查询条件 不含'where'字符,如id>10 and len(userid)>9 @Order VARCHAR(100

  • asp.net jquery无刷新分页插件(jquery.pagination.js)

    采用Jquery无刷新分页插件jquery.pagination.js 实现无刷新分页效果 友情提示:本示例Handler中采用StringBuilder的append方法追加HTML,小数据量可以,但是大数据或是布局常变,建议返回JSON格式的数据,性能和灵活性更好! 1.插件参数列表  2.页面内容: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defaul

随机推荐