asp.net 通用分頁(yè)顯示輔助類(lèi)(改進(jìn)版)
1、分頁(yè)模式和樣式擴(kuò)展
(1)定義枚舉
/// <summary>
/// 表格對(duì)齊枚舉
/// </summary>
public enum TbAlignEnum
{
Left = 1,
Center = 2,
Right = 3
}
/// <summary>
/// 分頁(yè)模式
/// </summary>
public enum PagerModoule
{
/// <summary>
/// 普通分頁(yè)模式
/// </summary>
Normal = 1,
/// <summary>
/// 統(tǒng)計(jì)分頁(yè)模式
/// </summary>
Statistics = 2
}
(2)根據(jù)枚舉呈現(xiàn)
/// <summary>
/// 分頁(yè)實(shí)用類(lèi)
/// </summary>
public sealed class AspNetPager
{
#region common
private const string defaultAlign = "center";//默認(rèn)對(duì)齊方式
private const string leftAlign = "left";
private const string rightAlign = "right";
/// <summary>
/// 獲取頁(yè)數(shù)
/// </summary>
/// <param name="objs">總記錄數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)</param>
/// <returns></returns>
public static int GetPageCout(object[] objs, int recordCountPerPage)
{
return (int)Math.Ceiling(((double)objs.Length / (double)recordCountPerPage));
}
/// <summary>
/// 獲取頁(yè)數(shù)
/// </summary>
/// <param name="totalCount">總記錄數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)</param>
/// <returns></returns>
public static int GetPageCout(int totalCount, int recordCountPerPage)
{
int result = 0;
if (totalCount % recordCountPerPage == 0)
{
result = totalCount / recordCountPerPage;
}
else
{
result = totalCount / recordCountPerPage + 1;
}
return result;
}
#endregion
#region render pager
/// <summary>
/// 寫(xiě)分頁(yè)頁(yè)碼(沒(méi)有表格)
/// </summary>
/// <param name="pagerMode"></param>
/// <param name="response"></param>
/// <param name="baseString"></param>
/// <param name="totalCount">總記錄數(shù)</param>
/// <param name="nowPage">當(dāng)前頁(yè)數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)</param>
public static void RenderPager(PagerModoule pagerMode, HttpResponse response, int totalCount, int nowPage, int recordCountPerPage, string baseString)
{
int pageCount = GetPageCout(totalCount, recordCountPerPage);
string pagerString = string.Empty;
if (pageCount > 0)
{
switch (pagerMode)
{
case PagerModoule.Normal:
pagerString = CreateLinkUrl(baseString, pageCount, nowPage, recordCountPerPage);
break;
case PagerModoule.Statistics:
pagerString = CreateStatisticLinkUrl(baseString, totalCount, pageCount, nowPage, recordCountPerPage);
break;
default:
pagerString = CreateLinkUrl(baseString, pageCount, nowPage, recordCountPerPage);
break;
}
response.Write(pagerString);
}
}
/// <summary>
/// 寫(xiě)分頁(yè)頁(yè)碼(有表格)
/// </summary>
/// <param name="pagerMode"></param>
/// <param name="alignEnum"></param>
/// <param name="response"></param>
/// <param name="baseString"></param>
/// <param name="totalCount">總記錄數(shù)</param>
/// <param name="nowPage">當(dāng)前頁(yè)數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)</param>
public static void RenderTablePager(PagerModoule pagerMode, TbAlignEnum alignEnum, HttpResponse response, int totalCount, int nowPage, int recordCountPerPage, string baseString)
{
int pageCount = GetPageCout(totalCount, recordCountPerPage);
if (pageCount > 0)
{
string align = string.Empty;
switch (alignEnum)
{
case TbAlignEnum.Left:
align = leftAlign;
break;
case TbAlignEnum.Center:
align = defaultAlign;
break;
case TbAlignEnum.Right:
align = rightAlign;
break;
default:
align = defaultAlign;
break;
}
StringBuilder sbTable = new StringBuilder();
sbTable.AppendFormat("<table><tr align='{0}'><td>", align);
string pagerString = string.Empty;
switch (pagerMode)
{
case PagerModoule.Normal:
pagerString = CreateLinkUrl(baseString, pageCount, nowPage, recordCountPerPage);
break;
case PagerModoule.Statistics:
pagerString = CreateStatisticLinkUrl(baseString, totalCount, pageCount, nowPage, recordCountPerPage);
break;
default:
pagerString = CreateLinkUrl(baseString, pageCount, nowPage, recordCountPerPage);
break;
}
sbTable.Append(pagerString);
sbTable.Append("</td></tr></table>");
response.Write(sbTable.ToString());
}
}
#endregion
#region create link
/// <summary>
/// 生成分頁(yè)字符串(顯示頁(yè)數(shù)和每頁(yè)記錄數(shù)相關(guān))
/// </summary>
/// <param name="baseString"></param>
/// <param name="pageCount">頁(yè)數(shù)</param>
/// <param name="nowPage">當(dāng)前頁(yè)數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)(推薦記錄數(shù):10)</param>
/// <returns></returns>
private static string CreateLinkUrl(string baseString, int pageCount, int nowPage, int recordCountPerPage)
{
StringBuilder sb = new StringBuilder();
int from, to;
if (nowPage - recordCountPerPage > 0)
{
from = nowPage - recordCountPerPage;
}
else
from = 1;
if (pageCount == 0)
pageCount = 1;
if (pageCount - nowPage - recordCountPerPage > 0)
{
to = nowPage + recordCountPerPage;
}
else
to = pageCount;
if (baseString.IndexOf("?") == -1)
baseString += "?";
else
baseString += "&";
sb.Append(string.Format("<a href=\"{0}pageIndex=1\" >首頁(yè)</a>", baseString));
if (pageCount > 1 && nowPage > 1)
{
sb.AppendFormat("<a href=\"{0}pageIndex={1}\" >上一頁(yè)</a>", baseString, (nowPage - 1).ToString());
}
else
{
sb.Append("<a href='javascript:void(0);' style='color:gray;' >上一頁(yè)</a>");
}
for (int i = from; i <= to; i++)
{
if (i == nowPage)
{
sb.AppendFormat(" <a href='javascript:void(0);' style='color:red;' >{0}</a>", nowPage.ToString());
}
else
{
sb.AppendFormat(" <a href=\"{0}pageIndex={1}\" >{1}</a>", baseString, i);
}
}
if (pageCount > 1 && nowPage < pageCount)
{
sb.AppendFormat("<a href=\"{0}pageIndex={1}\" >下一頁(yè)</a>", baseString, (nowPage + 1).ToString());
}
else
{
sb.Append("<a href=\"javascript:void(0);\" style='color:gray;' >下一頁(yè)</a>");
}
sb.Append(string.Format(" <a href={0}pageIndex={1} >尾頁(yè)</a>", baseString, pageCount));
return sb.ToString();
}
/// <summary>
/// 生成含統(tǒng)計(jì)信息的分頁(yè)字符串(顯示頁(yè)數(shù)和每頁(yè)記錄數(shù)相關(guān))
/// </summary>
/// <param name="baseString"></param>
/// <param name="totalCount">總記錄數(shù)</param>
/// <param name="pageCount">頁(yè)數(shù)</param>
/// <param name="nowPage">當(dāng)前頁(yè)數(shù)</param>
/// <param name="recordCountPerPage">每頁(yè)記錄數(shù)(推薦記錄數(shù):10)</param>
/// <returns></returns>
private static string CreateStatisticLinkUrl(string baseString, int totalCount, int pageCount, int nowPage, int recordCountPerPage)
{
StringBuilder sb = new StringBuilder();
string numricPager = CreateLinkUrl(baseString, pageCount, nowPage, recordCountPerPage);//普通數(shù)字分頁(yè)
sb.AppendFormat("總共<span style='color:red;'>{0}</span>條記錄,共<span style='color:red;'>{1}</span>頁(yè),當(dāng)前第<span style='color:red;'>{2}</span>頁(yè) ",
totalCount, pageCount, nowPage);
sb.Append(numricPager);
return sb.ToString();
}
#endregion
}
ps1:除了表格內(nèi)容對(duì)齊方式外,代碼里對(duì)樣式的控制幾乎都是硬編碼,個(gè)人認(rèn)為編碼階段對(duì)樣式的控制越少越好。理想狀態(tài)下,樣式應(yīng)該讓UI全部在外部控制,而不應(yīng)該由程序員來(lái)設(shè)計(jì)實(shí)現(xiàn),這里結(jié)合實(shí)際情況取折中方案。
ps2:分頁(yè)顯示的方式其實(shí)還可以擴(kuò)展,具體請(qǐng)參考gridview控件分頁(yè)模式。
2、頁(yè)面內(nèi)調(diào)用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Pager.aspx.cs" Inherits="WebTest.Pager" %>
<%@ Import Namespace=" DotNet.Common.WebForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>aspnet簡(jiǎn)單分頁(yè)</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%DotNet.Common.WebForm.AspNetPager.RenderTablePager(PagerModoule.Normal, TbAlignEnum.Right, Response, 93, 10, 10, "Pager.aspx"); %>
</div>
</form>
</body>
</html>
3、有圖有真相
(1)、普通模式
(2)、帶統(tǒng)計(jì)模式
最后,歡迎補(bǔ)充,期待您的建議和意見(jiàn)。
演示文件打包下載
相關(guān)文章
批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)
批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)...2007-04-04asp.net ext treepanel 動(dòng)態(tài)加載XML的實(shí)現(xiàn)方法
當(dāng)你在asp.net下面 使用Ext TreePanel直接加載服務(wù)器上XML文件會(huì)出現(xiàn)樹(shù)不能顯示,樹(shù)據(jù)不能正確加載的問(wèn)題。2008-10-10驗(yàn)證用戶必選CheckBox控件與自定義驗(yàn)證javascript代碼
CheckBox控件,由于它的值是選擇與非選擇。因此在提交數(shù)據(jù)時(shí),想讓用戶必須選擇CheckBox,普通情況之下,不好做驗(yàn)證;但我們可以使用asp:CustomValidator來(lái)驗(yàn)證,不過(guò)還得寫(xiě)自定義驗(yàn)證Javascript代碼2013-01-01asp.net使用jQuery Uploadify上傳附件示例
Uploadify是JQuery的一個(gè)上傳插件,實(shí)現(xiàn)的效果非常不錯(cuò),帶進(jìn)度顯示,本文是一個(gè)簡(jiǎn)單的介紹Demo,主要是動(dòng)態(tài)傳遞參數(shù)方法,通過(guò)formdata 向處理程序傳遞額外的表單數(shù)據(jù)2014-01-01Repeater怎么實(shí)現(xiàn)多行間隔顯示分隔符
本文為大家介紹下Repeater如何實(shí)現(xiàn)多行間隔顯示分隔符,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2014-01-01使用DataGrid中擴(kuò)展ItemRenderer和HeaderRenderer進(jìn)行操作
這兩天在用Flex DataGrid做點(diǎn)東西,走了不少?gòu)澛罚F(xiàn)將心得分享一下。2009-02-02asp.net XMLHttpRequest實(shí)現(xiàn)用戶注冊(cè)前的驗(yàn)證
用戶注冊(cè)前的驗(yàn)證,提高用戶體驗(yàn)。2009-10-10