栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

适用于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 : List, 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 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("");
 builder.Append("");

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

 }
 if (pagedList.pageIndex >= 1 && pagedList.pageIndex < pagedList.totalPageCount)
 {
   builder.Append("");
   builder.AppendFormat("{2}", url, pagedList.pageIndex + 1, "下一页");
   builder.Append("");
   builder.Append(" ");
   builder.Append("");
   builder.AppendFormat("{2}", url, pagedList.totalPageCount, "尾页");
   builder.Append("");
   builder.Append(" ");
 }
 builder.Append("");
      }
      return builder.ToString();
    }


    public static string Pager(string url, IPagedList pagedList, dynamic objAttr)
    {
      StringBuilder builder = new StringBuilder();
      if (pagedList != null)
      {
 builder.Append("");
 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("");

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


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

   }

 }
 if (pagedList.pageIndex >= 1 && pagedList.pageIndex < pagedList.totalPageCount)
 {
   builder.Append("");
   builder.AppendFormat("{2}", url, paras + (pagedList.pageIndex + 1), "下一页");
   builder.Append("");
   builder.Append(" ");
   builder.Append("");
   builder.AppendFormat("{2}", url, paras + pagedList.totalPageCount, "尾页");
   builder.Append("");
   builder.Append(" ");
 }
 builder.Append("");
      }
      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 ToPagedList(this IQueryable source, int pageIndex, int pageSize)
    {
      return new PagedList(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,......})

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/124321.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号