1、分页模式和样式扩展
(1)定义枚举
复制代码 代码如下:
///
/// 表格对齐枚举
///
public enum TbAlignEnum
{
Left = 1,
Center = 2,
Right = 3
}
///
/// 分页模式
///
public enum PagerModoule
{
///
/// 普通分页模式
///
Normal = 1,
///
/// 统计分页模式
///
Statistics = 2
}
(2)根据枚举呈现
复制代码 代码如下:
///
/// 分页实用类
///
public sealed class AspNetPager
{
#region common
private const string defaultAlign = "center";//默认对齐方式
private const string leftAlign = "left";
private const string rightAlign = "right";
///
/// 获取页数
///
/// 总记录数
/// 每页记录数
///
public static int GetPageCout(object[] objs, int recordCountPerPage)
{
return (int)Math.Ceiling(((double)objs.Length / (double)recordCountPerPage));
}
///
/// 获取页数
///
/// 总记录数
/// 每页记录数
///
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
///
/// 写分页页码(没有表格)
///
///
///
///
/// 总记录数
/// 当前页数
/// 每页记录数
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);
}
}
///
/// 写分页页码(有表格)
///
///
///
///
///
/// 总记录数
/// 当前页数
/// 每页记录数
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("
", 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(" |
response.Write(sbTable.ToString());
}
}
#endregion
#region create link
///
/// 生成分页字符串(显示页数和每页记录数相关)
///
///
/// 页数
/// 当前页数
/// 每页记录数(推荐记录数:10)
///
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("首页", baseString));
if (pageCount > 1 && nowPage > 1)
{
sb.AppendFormat("上一页", baseString, (nowPage - 1).ToString());
}
else
{
sb.Append("上一页");
}
for (int i = from; i <= to; i++)
{
if (i == nowPage)
{
sb.AppendFormat(" {0}", nowPage.ToString());
}
else
{
sb.AppendFormat(" {1}", baseString, i);
}
}
if (pageCount > 1 && nowPage < pageCount)
{
sb.AppendFormat("下一页", baseString, (nowPage + 1).ToString());
}
else
{
sb.Append("下一页");
}
sb.Append(string.Format(" 尾页", baseString, pageCount));
return sb.ToString();
}
///
/// 生成含统计信息的分页字符串(显示页数和每页记录数相关)
///
///
/// 总记录数
/// 页数
/// 当前页数
/// 每页记录数(推荐记录数:10)
///
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);//普通数字分页
sb.AppendFormat("总共{0}条记录,共{1}页,当前第{2}页 ",
totalCount, pageCount, nowPage);
sb.Append(numricPager);
return sb.ToString();
}
#endregion
}
ps1:除了表格内容对齐方式外,代码里对样式的控制几乎都是硬编码,个人认为编码阶段对样式的控制越少越好。理想状态下,样式应该让UI全部在外部控制,而不应该由程序员来设计实现,这里结合实际情况取折中方案。
ps2:分页显示的方式其实还可以扩展,具体请参考gridview控件分页模式。
2、页面内调用
复制代码 代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Pager.aspx.cs" Inherits="WebTest.Pager" %>
<%@ Import Namespace=" DotNet.Common.WebForm" %>
3、有图有真相
(1)、普通模式
(2)、带统计模式
最后,欢迎补充,期待您的建议和意见。
演示文件打包下载