适用于WebForm Mvc的Pager分页组件C#实现_C#教程

本文为大家分享了自己写的一个Pager分页组件,WebForm,Mvc都适用,具体内容如下

分页控件其实就是根据链接在页面间传递参数,因为我看到MVC中你可以看到这样传递参数的new {para=val}这种方式传递参数,于是我想到用可以模仿这种传递参数的方式,那就用dynamic来作为参数对象传递。

下面是附上我写的具体的实现的代码

数据处理代码:

1.定义IPagedList接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infrastruction.Pager
{
  public interface IPagedList
  {
    int pageIndex { get; set; }
    int pageSize { get; set; }
    int totalItemCount { get; set; }
    int totalPageCount { get; }
  }
}

2.实现IPagedList接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Infrastruction.Pager
{
  public class PagedList<T> : List<T>, IPagedList
  {
    public int pageIndex
    {
      get;
      set;
    }

    public int pageSize
    {
      get;
      set;
    }

    public int totalItemCount
    {
      get;
      set;
    }

    public int totalPageCount
    {
      get
      {
        return totalItemCount % pageSize == 0 ? (totalItemCount / pageSize) : (totalItemCount / pageSize + 1);
      }
    }

    public PagedList(IEnumerable<T> sources, int pageIndex, int pageSize)
    {
      if (sources != null && sources.Any())
      {
        this.AddRange(sources.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList());
      }
      this.pageIndex = pageIndex;
      this.pageSize = pageSize;
      this.totalItemCount = sources.Count();
    }
  }
}

分页标签处理代码:

 3.PagerHelper

using Infrastruction.Pager;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.UI;

namespace System.Web.UI
{
  public static class PagerHelper
  {

    public static string Pager(string url, IPagedList pagedList)
    {
      StringBuilder builder = new StringBuilder();
      if (pagedList != null)
      {
        builder.Append("<script type='text/javascript'>");
        builder.Append("window.onload = function () {");
        builder.Append(" var elements = document.getElementById('pager').childNodes;");
        builder.Append(" for (var i = 0; i < elements.length; i++) {");
        builder.Append("var txt = elements[i].innerText || elements[i].textContent;");
        builder.Append(" if (elements[i].nodeType =='1' && txt == '" + pagedList.pageIndex + "') {");
        builder.Append("elements[i].style.textDecoration = 'underline';break; } } }");
        builder.Append("</script>");
        builder.Append("<div id='pager'>");

        builder.Append("<span class='p'>");
        builder.AppendFormat("共 {0} 条数据  页次:{1}/{2}", pagedList.totalItemCount, pagedList.pageIndex, pagedList.totalPageCount, "上一页");
        builder.Append("</span>");
        builder.Append(" ");
        builder.Append(" ");
        builder.Append(" ");
        builder.Append(" ");
        if (pagedList.pageIndex > 1 && pagedList.pageIndex <= pagedList.totalPageCount)
        {
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, 1, "首页");
          builder.Append("</span>");
          builder.Append(" ");
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, pagedList.pageIndex - 1, "上一页");
          builder.Append("</span>");
          builder.Append(" ");
        }
        if (pagedList.totalPageCount > 1 && pagedList.totalPageCount <= 10)
        {
          for (int i = 1; i <= pagedList.totalPageCount; i++)
          {
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, i, i);
            builder.Append("</span>");
            builder.Append(" ");
          }
        }
        else if (pagedList.totalPageCount > 10)
        {
          if (pagedList.pageIndex < 11)
          {
            for (int i = 1; i <= 10; i++)
            {
              builder.Append("<span class='p'>");
              builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, i, i);
              builder.Append("</span>");
              builder.Append(" ");
            }
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, 11, "...");
            builder.Append("</span>");
            builder.Append(" ");
          }
          else
          {
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, (pagedList.pageIndex - 6), "...");
            builder.Append("</span>");
            builder.Append(" ");
            if (pagedList.pageIndex >= 11 && pagedList.totalPageCount <= pagedList.pageIndex + 5)
            {
              for (int i = pagedList.pageIndex - 5; i <= pagedList.totalPageCount; i++)
              {
                builder.Append("<span class='p'>");
                builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, i, i);
                builder.Append("</span>");
                builder.Append(" ");
              }
            }
            else
            {
              for (int i = pagedList.pageIndex - 5; i <= pagedList.pageIndex + 5; i++)
              {
                builder.Append("<span class='p'>");
                builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, i, i);
                builder.Append("</span>");
                builder.Append(" ");
              }
              builder.Append("<span class='p'>");
              builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, (pagedList.pageIndex + 6), "...");
              builder.Append("</span>");
              builder.Append(" ");
            }
          }

        }
        if (pagedList.pageIndex >= 1 && pagedList.pageIndex < pagedList.totalPageCount)
        {
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, pagedList.pageIndex + 1, "下一页");
          builder.Append("</span>");
          builder.Append(" ");
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, pagedList.totalPageCount, "尾页");
          builder.Append("</span>");
          builder.Append(" ");
        }
        builder.Append("</div>");
      }
      return builder.ToString();
    }

    public static string Pager(string url, IPagedList pagedList, dynamic objAttr)
    {
      StringBuilder builder = new StringBuilder();
      if (pagedList != null)
      {
        builder.Append("<script type='text/javascript'>");
        builder.Append("window.onload = function () {");
        builder.Append(" var elements = document.getElementById('pager').childNodes;");
        builder.Append(" for (var i = 0; i < elements.length; i++) {");
        builder.Append("var txt = elements[i].innerText || elements[i].textContent;");
        builder.Append(" if (elements[i].nodeType =='1' && txt == '" + pagedList.pageIndex + "') {");
        builder.Append("elements[i].style.textDecoration = 'underline';break; } } }");
        builder.Append("</script>");
        string paras = "";
        PropertyInfo[] infos = objAttr.GetType().GetProperties();
        if (infos != null && infos.Any())
        {
          foreach (var item in infos)
          {
            paras += string.Format("{0}={1}", item.Name, item.GetValue(objAttr, null));
            paras += "&";
          }
        }
        paras = paras + "pageIndex=";
        builder.Append("<div id='pager'>");

        builder.Append("<span class='p'>");
        builder.AppendFormat("共 {0} 条数据  页次:{1}/{2}", pagedList.totalItemCount, pagedList.pageIndex, pagedList.totalPageCount, "上一页");
        builder.Append("</span>");
        builder.Append(" ");
        builder.Append(" ");
        builder.Append(" ");
        builder.Append(" ");

        if (pagedList.pageIndex > 1 && pagedList.pageIndex <= pagedList.totalPageCount)
        {
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + 1, "首页");
          builder.Append("</span>");
          builder.Append(" ");
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex - 1), "上一页");
          builder.Append("</span>");
          builder.Append(" ");
        }
        if (pagedList.totalPageCount > 1 && pagedList.totalPageCount <= 10)
        {
          for (int i = 1; i <= pagedList.totalPageCount; i++)
          {
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + i, i);
            builder.Append("</span>");
            builder.Append(" ");
          }
        }
        else if (pagedList.totalPageCount > 10)
        {
          if (pagedList.pageIndex < 11)
          {
            for (int i = 1; i <= 10; i++)
            {
              builder.Append("<span class='p'>");
              builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + i, i);
              builder.Append("</span>");
              builder.Append(" ");
            }
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + 11, "...");
            builder.Append("</span>");
            builder.Append(" ");
          }
          else
          {
            builder.Append("<span class='p'>");
            builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex - 6), "...");
            builder.Append("</span>");
            builder.Append(" ");
            if (pagedList.pageIndex >= 11 && pagedList.totalPageCount <= pagedList.pageIndex + 5)
            {
              for (int i = pagedList.pageIndex - 5; i <= pagedList.totalPageCount; i++)
              {
                builder.Append("<span class='p'>");
                builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + i, i);
                builder.Append("</span>");
                builder.Append(" ");
              }
            }
            else
            {
              for (int i = pagedList.pageIndex - 5; i <= pagedList.pageIndex + 5; i++)
              {
                builder.Append("<span class='p'>");
                builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + i, i);
                builder.Append("</span>");
                builder.Append(" ");
              }
              builder.Append("<span class='p'>");
              builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex + 6), "...");
              builder.Append("</span>");
              builder.Append(" ");
            }

          }

        }
        if (pagedList.pageIndex >= 1 && pagedList.pageIndex < pagedList.totalPageCount)
        {
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex + 1), "下一页");
          builder.Append("</span>");
          builder.Append(" ");
          builder.Append("<span class='p'>");
          builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + pagedList.totalPageCount, "尾页");
          builder.Append("</span>");
          builder.Append(" ");
        }
        builder.Append("</div>");
      }
      return builder.ToString();
    }

  }
}

4.  PagerLinqExtension( 基于linq的扩展)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;

namespace Infrastruction.Pager
{
  public static class PagerLinqExtension
  {

    public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int pageIndex, int pageSize)
    {
      return new PagedList<T>(source, pageIndex, pageSize);
    }

  }
}

调用方法 

1.Webform调用:   <%=PagerHelper.Pager("Products.aspx", pageList, new { cid=Cid})%>   或者用literal在后台绑定也行

2.Mvc调用:

 需要扩展一下方法

namespace System.Web.Mvc.Html
{
  public static class HtmlExtension
  {
    public static IHtmlString Pager(this HtmlHelper helper, string url, IPagedList pagedList)
    {
      return helper.Raw(PagerHelper.Pager(url, pagedList));
    }
    public static IHtmlString Pager(this HtmlHelper helper, string url, IPagedList pagedList, dynamic objAttr)
    {
      return helper.Raw(PagerHelper.Pager(url, pagedList, objAttr));
    }
  }
}

然后页面调用@Html.Pager("Products.aspx", pageList, new { cid=Cid,......})

全部的代码都在上面,希望大家认真学习,对大家学习使用分页控件有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 分页组件
pager
mvcpager ajax 分页、jquery pager 分页、jquery.pager.js 分页、pagertemplate 分页、mvcpager无刷新分页,以便于您获取更多的相关知识。

时间: 2024-11-01 15:45:38

适用于WebForm Mvc的Pager分页组件C#实现_C#教程的相关文章

C# MVC模式下商品抽奖功能实现_C#教程

最近项目需求的一个抽奖功能给整理了下,语言表达能力不好,写的不好请勿吐槽,一笑而过就好.好了下面开始说说这个抽奖功能.因为涉及到公司的项目所以一些敏感的地方均已中文代替. 首先在后台添加奖品的名称以及概率如图: 后台代码没什么好说的,我们来看看前端代码. 通过html做出如下样式: <div class="turntable-bg"> <div class="pointer"> <img id="pointer" s

C# 重写ComboBox实现下拉任意组件的方法_C#教程

一.需求 C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉. 二.设计 基本思路:重写ComboBox,将原生的下拉部分屏蔽,使用toolStripDropDown制作下拉弹出 三.问题解决 1. 问题:toolStripDropDown中放toolStripControlHost时会有边框产生,同时CheckedListBox的duck为full时底端会有很大空白 解决: toolStripControlHos

分享一个自己写的简单的javascript分页组件

 这篇文章主要分享一个自己写的简单的javascript分页组件,效果十分不错,代码也很详尽,这里推荐给小伙伴们.     自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下:   代码如下: <ul class="pagination" id="pageDIV"> </ul> class="pagination" 给定了分页的样式,

VUE实现一个分页组件

分页是WEB开发中很常用的功能,尤其是在各种前后端分离的今天,后端API返回数据,前端根据数据的count以及当前页码pageIndex来计算分页页码并渲染到页面上已经是一个很普通很常见的功能了.从最开始的jquery时代到现在的各种各样的前端框架时代,分页功能都是必不可少的. 分页大多数(基本上)情况下都是对异步数据列表的处理,这里首先需要明白一下分页的流程. 在已知每页显示数据量pageSize以及当前页码pageIndex的情况下: 请求API,返回第一屏数据(pageSize内)以及所有

javascript 分页组件

原文:javascript 分页组件 自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="pagination" id="pageDIV"> </ul> class="pagination" 给定了分页的样式, id="pageDIV"用于放置JS生成的分页 CSS结构如下: .pagina

分享一个自己写的简单的javascript分页组件_javascript技巧

自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: 复制代码 代码如下: <ul class="pagination" id="pageDIV"> </ul> class="pagination" 给定了分页的样式, id="pageDIV"用于放置JS生成的分页 CSS结构如下: 复制代码 代码如下: .pag

JQuery 常用积累(二)Pagination 分页组件

阅读目录 1.JSP页面 2.JS 控制 3.后台java类进行处理的两个公共方法 官方Demo网址:http://mricle.com/JqueryPagination      分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款,功能强大,可扩展性比较强,而且幕后的工程师一直在完善这个插件,不废话了,上干货. (模拟场景:商店网站,俺要根据用户选择的查询条件,来查询数据库,并展示到前台) 回到顶部 1.JSP页面 如果你的web项目前台是基于bootstr

ASP.NET分页组件学与用——教学篇

asp.net|分页 ASP.NET分页组件学与用--教学篇 没有人会怀疑分页组件在WEB应用程序中的作用.数据库中的记录数成千上万甚至过亿,如果一股脑儿显示在一页显然毫不现实,这样的程序员也太小儿科了.所以,最好的办法就是分页显示,每页只显示数据库中的一部分记录,可以翻页,也可以输入一个页码翻到指定的页面,这种方式也是当前比较常见的用法. 本文的不同之处在于,我把分页的功能封装在组件中,一方面体现了面向对象的特点,另一方面也方便发布.共享和使用.事先声明,本文不再讲述组件创建的详细过程,如果有

ASP.NET分页组件学与用——使用篇

asp.net|分页 ASP.NET分页组件学与用--使用篇 大家好,这篇文章承启上一篇文章<ASP.NET分页组件学与用--教学篇>. 在<ASP.NET分页组件学与用--教学篇>中,我们讲解了分页组件的整个创建过程,那么在这一篇文章中,我们主要讨论一下如何使用该组件. 请按以下步骤操作: 1. 创建一个WEB应用程序工程. 2. 将上篇文章中生成的组件添加到工具箱中.如果您不知道添加的过程,请参考文章<ASP.NET组件编程step by step> 3. 在默认的