適用于WebForm Mvc的Pager分頁組件C#實(shí)現(xiàn)
本文為大家分享了自己寫的一個Pager分頁組件,WebForm,Mvc都適用,具體內(nèi)容如下
分頁控件其實(shí)就是根據(jù)鏈接在頁面間傳遞參數(shù),因為我看到MVC中你可以看到這樣傳遞參數(shù)的new {para=val}這種方式傳遞參數(shù),于是我想到用可以模仿這種傳遞參數(shù)的方式,那就用dynamic來作為參數(shù)對象傳遞。
下面是附上我寫的具體的實(shí)現(xiàn)的代碼
數(shù)據(jù)處理代碼:
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.實(shí)現(xiàn)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();
}
}
}
分頁標(biāo)簽處理代碼:
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} 條數(shù)據(jù) 頁次:{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} 條數(shù)據(jù) 頁次:{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的擴(kuò)展)
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);
}
}
}
調(diào)用方法
1.Webform調(diào)用: <%=PagerHelper.Pager("Products.aspx", pageList, new { cid=Cid})%> 或者用literal在后臺綁定也行
2.Mvc調(diào)用:
需要擴(kuò)展一下方法
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));
}
}
}
然后頁面調(diào)用@Html.Pager("Products.aspx", pageList, new { cid=Cid,......})
全部的代碼都在上面,希望大家認(rèn)真學(xué)習(xí),對大家學(xué)習(xí)使用分頁控件有所幫助。
上一篇:C#實(shí)現(xiàn)在控制臺輸入密碼顯示星號的方法
欄 目:C#教程
下一篇:C#基礎(chǔ)知識之new關(guān)鍵字介紹
本文標(biāo)題:適用于WebForm Mvc的Pager分頁組件C#實(shí)現(xiàn)
本文地址:http://m.jygsgssxh.com/a1/C_jiaocheng/6574.html
您可能感興趣的文章
- 01-10ASP.NET MVC命名空間時引起錯誤的解決方法
- 01-10mvc C# JavaScript LigerUI oracle實(shí)現(xiàn)用戶的注冊、登陸驗證、登陸
- 01-10C# MVC模式下商品抽獎功能實(shí)現(xiàn)
- 01-10基于mvc5+ef6+Bootstrap框架實(shí)現(xiàn)身份驗證和權(quán)限管理
- 01-10BootStrap mvcpager分頁樣式(get請求,刷新頁面)
- 01-10C# 實(shí)現(xiàn)ADSL自動斷網(wǎng)和撥號的方法(適用于撥號用戶)
- 01-10C# MVC 微信支付教程系列之公眾號支付代碼
- 01-10C# MVC 微信支付教程系列之掃碼支付代碼實(shí)例
- 01-10asp.net core mvc權(quán)限控制:在視圖中控制操作權(quán)限
- 01-10asp.net core項目mvc權(quán)限控制:分配權(quán)限


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)


