软件编程
位置:首页>> 软件编程>> C#编程>> 适用于WebForm Mvc的Pager分页组件C#实现

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

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

标签:C#,Pager,分页,组件

本文为大家分享了自己写的一个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,......})

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com