C#實現分頁的算法


C#實現分頁的算法

1 新建DataPages分頁數據類如下

public class DataPages<T> where T : class, new()
{
/// <summary>
/// 頁碼
/// </summary>
public int PageIndex { get; set; }

//每頁大小
public int PageSize { get; set; }

/// <summary>
/// 集合數據
/// </summary>
public IList<T> Records { get; set; } = new List<T>();

/// <summary>
/// 總記錄數
/// </summary>
public int TotalRecords { get; set; }

/// <summary>
/// 當前點擊的樣式
/// </summary>
public string CurrentLinkClassName { get; set; }

public DataPages()
{
this.PageIndex = 1;
this.PageSize = 10;
}

/// <summary>
/// 分頁數據
/// </summary>
/// <param name="helper"></param>
/// <param name="ShowPage">每屏顯示多少頁碼 默認每屏10條</param>
/// <param name="CurrentLinkClassName">每當前點擊的樣式</param>
/// <returns></returns>
public string ManageRenderPager(System.Web.Mvc.UrlHelper helper, int ShowPage,string CurrentLinkClassName)
{
return PageHelper.ManagePager(helper, TotalRecords, PageSize, PageIndex, ShowPage,CurrentLinkClassName);
}
}

2實現分頁的算法

/// <summary>
/// 通用分頁
/// </summary>
public static class PageHelper
{
/// <summary>
/// 通用分頁
/// </summary>
/// <param name="helper"></param>
/// <param name="TotalRecords">記錄數</param>
/// <param name="PageSize">頁數</param>
/// <param name="PageIndex">頁碼</param>
/// <param name="ShowPage">每屏顯示多少頁碼 默認每屏10條</param>
/// <param name="CurrentLinkClassName">每當前點擊的樣式</param>
/// <returns></returns>
public static string ManagePager(System.Web.Mvc.UrlHelper helper, int TotalRecords, int PageSize, int PageIndex,int ShowPage,string CurrentLinkClassName)
{
//構建查詢字符串
string pageQuery = HttpContext.Current.Request.Url.AbsolutePath + "?";

//獲取Url請求的參數組合Url信息
foreach (string item in HttpContext.Current.Request.QueryString.Keys)
{
if (!string.IsNullOrEmpty(item)&& item.ToUpper()=="PAGE")
{
continue;
}
pageQuery+=(item+"="+HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString[item]))+"&";
}

StringBuilder stringBuilder = new StringBuilder();

//顯示的分頁數量
int pageCount = TotalRecords % PageSize > 0 ? TotalRecords / PageSize + 1 : TotalRecords / PageSize;

if (PageIndex < 1)
{
PageIndex = 1;
}
else if (PageIndex > pageCount)
{
PageIndex = pageCount;
}

//上一頁
int PrevIdx = PageIndex <= 1 ? 1 : PageIndex - 1;
//下一頁
int MextIdx = PageIndex + 1 < pageCount ? PageIndex + 1 : pageCount;
//每組頁碼多少條
int PageLinkCount = ShowPage;

stringBuilder.AppendFormat("當前第<b style=\"font-size:14px;color:#367DA4\">{0}</b>頁&nbsp;", PageIndex);
stringBuilder.Append(@"<ul class='pagination' data-currentpage='10' data-firstpage=' / mvcpager / demos / applycss / ' data-invalidpageerrmsg='頁索引無效' data-outrangeerrmsg='頁索引超出范圍' data-pagecount='80' data-pageparameter='id' data-pagerid='Webdiyer.MvcPager' data-urlformat=' / mvcpager / demos / applycss / __id__ / ' id='bootstrappager'>");
if (TotalRecords>0)
{

stringBuilder.AppendFormat("<li><a href=\"{0}\">首頁</a></li>&nbsp;", pageQuery + "Page=1");
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">上一頁</a></li>&nbsp;", pageQuery + "Page=" + PrevIdx);

int index = PageIndex;
if (index > PageLinkCount / 2)
{
index = index - (PageLinkCount / 2);
}
else
{
index = 1;
}

for (int i = 0; i < PageLinkCount; i++)
{
if (index + i <= pageCount)
{
if (PageIndex == index + i)
{
stringBuilder.AppendFormat("<li><a class=\"ahover\" href=\"{0}\">{1}</a></li>&nbsp;", pageQuery + "Page=" + (index + i), index + i);
}
else
{
stringBuilder.AppendFormat("<li><a href=\"{0}\">{1}</a></li>&nbsp;", pageQuery + "Page=" + (index + i).ToString(), index + i);
}
}
}
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">下一頁</a></li>&nbsp;", pageQuery + "Page=" + MextIdx);
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">尾頁</a></li>&nbsp;", pageQuery + "Page=" + pageCount);
}

stringBuilder.Append("</ul>");
return stringBuilder.ToString();
}
}

展示效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM