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>頁 ", 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> ", pageQuery + "Page=1");
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">上一頁</a></li> ", 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> ", pageQuery + "Page=" + (index + i), index + i);
}
else
{
stringBuilder.AppendFormat("<li><a href=\"{0}\">{1}</a></li> ", pageQuery + "Page=" + (index + i).ToString(), index + i);
}
}
}
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">下一頁</a></li> ", pageQuery + "Page=" + MextIdx);
stringBuilder.AppendFormat("<li><a class=\"ch\" href=\"{0}\">尾頁</a></li> ", pageQuery + "Page=" + pageCount);
}
stringBuilder.Append("</ul>");
return stringBuilder.ToString();
}
}
展示效果