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

作者:香草柠檬 时间:2022-05-11 22:11:34 

本文为大家分享了自己写的一个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("&nbsp;");
       builder.Append("&nbsp;");
       builder.Append("&nbsp;");
       builder.Append("&nbsp;");
       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("&nbsp;");
         builder.Append("<span class='p'>");
         builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, pagedList.pageIndex - 1, "上一页");
         builder.Append("</span>");
         builder.Append("&nbsp;");
       }
       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("&nbsp;");
         }
       }
       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("&nbsp;");
           }
           builder.Append("<span class='p'>");
           builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, 11, "...");
           builder.Append("</span>");
           builder.Append("&nbsp;");
         }
         else
         {
           builder.Append("<span class='p'>");
           builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, (pagedList.pageIndex - 6), "...");
           builder.Append("</span>");
           builder.Append("&nbsp;");
           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("&nbsp;");
             }
           }
           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("&nbsp;");
             }
             builder.Append("<span class='p'>");
             builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, (pagedList.pageIndex + 6), "...");
             builder.Append("</span>");
             builder.Append("&nbsp;");
           }
         }

}
       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("&nbsp;");
         builder.Append("<span class='p'>");
         builder.AppendFormat("<a href='{0}?pageIndex={1}'>{2}</a>", url, pagedList.totalPageCount, "尾页");
         builder.Append("</span>");
         builder.Append("&nbsp;");
       }
       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("&nbsp;");
       builder.Append("&nbsp;");
       builder.Append("&nbsp;");
       builder.Append("&nbsp;");

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("&nbsp;");
         builder.Append("<span class='p'>");
         builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex - 1), "上一页");
         builder.Append("</span>");
         builder.Append("&nbsp;");
       }
       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("&nbsp;");
         }
       }
       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("&nbsp;");
           }
           builder.Append("<span class='p'>");
           builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + 11, "...");
           builder.Append("</span>");
           builder.Append("&nbsp;");
         }
         else
         {
           builder.Append("<span class='p'>");
           builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex - 6), "...");
           builder.Append("</span>");
           builder.Append("&nbsp;");
           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("&nbsp;");
             }
           }
           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("&nbsp;");
             }
             builder.Append("<span class='p'>");
             builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + (pagedList.pageIndex + 6), "...");
             builder.Append("</span>");
             builder.Append("&nbsp;");
           }

}

}
       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("&nbsp;");
         builder.Append("<span class='p'>");
         builder.AppendFormat("<a href='{0}?{1}'>{2}</a>", url, paras + pagedList.totalPageCount, "尾页");
         builder.Append("</span>");
         builder.Append("&nbsp;");
       }
       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,分页,组件
0
投稿

猜你喜欢

  • Java中常见的对象转换工具

    2023-12-14 19:23:16
  • Android中将View的内容保存为图像的简单实例

    2023-11-01 12:45:41
  • C#实现字体旋转的方法

    2023-01-19 06:41:40
  • C#调用Oracle存储过程的方法

    2022-10-19 02:29:19
  • C#实现json的序列化和反序列化实例代码

    2022-07-18 01:50:34
  • 教你创建一个带诊断工具的.NET镜像

    2021-09-28 03:11:11
  • C#泛型的使用及示例详解

    2022-03-14 07:01:59
  • Java 守护线程_动力节点Java学院整理

    2023-11-28 07:51:14
  • Hibernate实现批量添加数据的方法

    2023-11-29 08:53:56
  • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    2022-06-24 08:07:48
  • C# 如何设置label(标签)控件的背景颜色为透明

    2023-05-27 11:03:00
  • Spring注解@Configuration和@Component区别详解

    2022-11-05 02:04:18
  • 浅谈Android ASM自动埋点方案实践

    2021-10-19 22:01:18
  • Android输入法弹出时覆盖输入框问题的解决方法

    2023-02-06 06:36:52
  • 详解Java中Period类的使用方法

    2023-11-28 21:04:44
  • 详解Java中方法重写与重载的区别(面试高频问点)

    2022-07-19 10:36:48
  • Java I/O中I/O流的典型使用方式详解

    2023-07-08 21:07:51
  • Java基于Dijkstra算法实现校园导游程序

    2021-10-15 15:38:18
  • javac、java打jar包命令实例

    2022-06-28 19:29:11
  • 简单探索 Java 中的惰性计算

    2023-11-16 20:25:28
  • asp之家 软件编程 m.aspxhome.com