适用于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(" ");
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,分页,组件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java中常见的对象转换工具
2023-12-14 19:23:16
![](https://img.aspxhome.com/file/2023/6/71886_0s.webp)
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
![](https://img.aspxhome.com/file/2023/2/82152_0s.png)
C#泛型的使用及示例详解
2022-03-14 07:01:59
![](https://img.aspxhome.com/file/2023/0/89760_0s.png)
Java 守护线程_动力节点Java学院整理
2023-11-28 07:51:14
![](https://img.aspxhome.com/file/2023/7/60177_0s.png)
Hibernate实现批量添加数据的方法
2023-11-29 08:53:56
![](https://img.aspxhome.com/file/2023/5/60815_0s.jpg)
基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例
2022-06-24 08:07:48
C# 如何设置label(标签)控件的背景颜色为透明
2023-05-27 11:03:00
![](https://img.aspxhome.com/file/2023/2/79042_0s.jpg)
Spring注解@Configuration和@Component区别详解
2022-11-05 02:04:18
浅谈Android ASM自动埋点方案实践
2021-10-19 22:01:18
![](https://img.aspxhome.com/file/2023/4/101824_0s.png)
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
![](https://img.aspxhome.com/file/2023/4/104014_0s.jpg)
javac、java打jar包命令实例
2022-06-28 19:29:11
简单探索 Java 中的惰性计算
2023-11-16 20:25:28