好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

适用于WebForm Mvc的Pager分页组件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( "&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,......})

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

dy("nrwz");

查看更多关于适用于WebForm Mvc的Pager分页组件C#实现的详细内容...

  阅读:50次