asp.net 通用分页显示辅助类(改进版)

闲暇时重新再看之前很多项目代码的时候,发现很多总是有那么点缺陷的代码,如芒刺入骨,令人心烦。挣扎良久,苦口婆心劝荐自己今后要争取把某些代码写的更易用更灵活更完善一些。比如在这篇已经提及到的通用客户端分页显示辅助类(AspNetPager),在大大小小项目中出现频率非常高,但是显然对分页形式的选择和样式的控制弱了点。虽然之前这个功能的实现都是按照实际项目的需求来实现的,对旧项目没有影响,但是这也不能成为该功能没有充分实现扩展性和通用性的理由,这点向来自傲的楼猪也不得不承认。

1、分页模式和样式扩展
(1)定义枚举


代码如下:

/// <summary>
/// 表格对齐枚举
/// </summary>
public enum TbAlignEnum
{
Left = 1,

Center = 2,

Right = 3
}

/// <summary>
/// 分页模式
/// </summary>
public enum PagerModoule
{
/// <summary>
/// 普通分页模式
/// </summary>
Normal = 1,

/// <summary>
/// 统计分页模式
/// </summary>
Statistics = 2
}

(2)根据枚举呈现


代码如下:

/// <summary>
/// 分页实用类
/// </summary>
public sealed class AspNetPager
{
#region common

private const string defaultAlign = "center";//默认对齐方式
private const string leftAlign = "left";
private const string rightAlign = "right";

/// <summary>
/// 获取页数
/// </summary>
/// <param name="objs">总记录数</param>
/// <param name="recordCountPerPage">每页记录数</param>
/// <returns></returns>
public static int GetPageCout(object[] objs, int recordCountPerPage)
{
return (int)Math.Ceiling(((double)objs.Length / (double)recordCountPerPage));
}

/// <summary>
/// 获取页数
/// </summary>
/// <param name="totalCount">总记录数</param>
/// <param name="recordCountPerPage">每页记录数</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>
/// 写分页页码(没有表格)
/// </summary>
/// <param name="pagerMode"></param>
/// <param name="response"></param>
/// <param name="baseString"></param>
/// <param name="totalCount">总记录数</param>
/// <param name="nowPage">当前页数</param>
/// <param name="recordCountPerPage">每页记录数</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>
/// 写分页页码(有表格)
/// </summary>
/// <param name="pagerMode"></param>
/// <param name="alignEnum"></param>
/// <param name="response"></param>
/// <param name="baseString"></param>
/// <param name="totalCount">总记录数</param>
/// <param name="nowPage">当前页数</param>
/// <param name="recordCountPerPage">每页记录数</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>
/// 生成分页字符串(显示页数和每页记录数相关)
/// </summary>
/// <param name="baseString"></param>
/// <param name="pageCount">页数</param>
/// <param name="nowPage">当前页数</param>
/// <param name="recordCountPerPage">每页记录数(推荐记录数: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\" >首页</a>", baseString));
if (pageCount > 1 && nowPage > 1)
{
sb.AppendFormat("<a href=\"{0}pageIndex={1}\" >上一页</a>", baseString, (nowPage - 1).ToString());
}
else
{
sb.Append("<a href='javascript:void(0);' style='color:gray;' >上一页</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}\" >下一页</a>", baseString, (nowPage + 1).ToString());
}
else
{
sb.Append("<a href=\"javascript:void(0);\" style='color:gray;' >下一页</a>");
}
sb.Append(string.Format(" <a href={0}pageIndex={1} >尾页</a>", baseString, pageCount));
return sb.ToString();
}

/// <summary>
/// 生成含统计信息的分页字符串(显示页数和每页记录数相关)
/// </summary>
/// <param name="baseString"></param>
/// <param name="totalCount">总记录数</param>
/// <param name="pageCount">页数</param>
/// <param name="nowPage">当前页数</param>
/// <param name="recordCountPerPage">每页记录数(推荐记录数: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);//普通数字分页
sb.AppendFormat("总共<span style='color:red;'>{0}</span>条记录,共<span style='color:red;'>{1}</span>页,当前第<span style='color:red;'>{2}</span>页  ",
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" %>
<!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简单分页</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)、带统计模式

最后,欢迎补充,期待您的建议和意见。

演示文件打包下载

(0)

相关推荐

  • ASP Recordset 分页显示数据的方法(修正版)

    1.建立Recordset对象 复制代码 代码如下: Dim objMyRst Set objMyRst=Server.CreateObject("ADODB.Recordset") objMyRst.CursorLocation=adUseClientBatch '客户端可批量处理 objMyRst.CursorType=adOpenStatic'光标类型为静态类型 注意:Recordset对象不能用Set objMyRst=Connection.Excute strSQL的语句建立

  • asp.net 文章分页显示实现代码

    复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) { string str = "事情发生在5月14日晚上23:30分,廊坊师范学院1号楼宿舍发生了恶性打架杀人事件,因1号楼较为复杂,有体育生.英语学院.教育学院等学生住宿,当时情况较为混乱.被害者是一名10级接本的体育生(马上面临毕业)和一名11级教育学院的新生,双方产生 矛盾原因目前不明,当场造成2死1重伤,伤口刀刀致命.其中一人被凶手割断喉部大动脉,未经抢救,当场

  • asp.net 文章内容分页显示的代码

    aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ArticlePage.aspx.cs" Inherits="ArticlePage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/

  • 用vbs模拟的一个asp的分页显示功能

    刚做完1个项目,闲的无聊,想改改自己HomePage,但没有Asp权限,所以突发奇想,用vbs模拟了一个图片分页显示功能!由于写的是适合自己使用的功能,难免很多地方不是很完善!也请各位路过的提些意见,若有朋友正好想找类似的功能,或许可以帮助一下,另外,祝论坛的每一位朋友元旦快乐! 复制代码 代码如下: <script language=VBS> Function showINDEXPAGE()          JS=1          webPath=window.location    

  • asp.net 分页显示数据表的数据的代码

    实现代码如下: 复制代码 代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebCo

  • Asp 解析 XML并分页显示源码

    Asp 解析 XML并分页显示,示例源码如下: 复制代码 代码如下: <!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>

  • ASP中实现分页显示的七种方法

    在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便.自由.而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM).Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便. 因为主题方面的原因,关于

  • asp长文章用分页符来分页显示

    需要注意的是 [ page ]需要删除中间的空格,因为与我们的后台分页重复,所以加了空格处理. 只是在文章添加时,在你想让它分页的地方加上分页符:"[ page ]"(当然这个符号你可以随便用,比如:[ page ].&&&.###.@@@--,只要它不会在文章要正常显示的地方出现就行了.) 我用了四个页面,输入页(index.asp).输入完成页(add.asp).文章列表页(view.asp).文章内容页(text.asp),前三个都是不用处理的页面,看下面

  • asp.net 通用分页显示辅助类(改进版)

    闲暇时重新再看之前很多项目代码的时候,发现很多总是有那么点缺陷的代码,如芒刺入骨,令人心烦.挣扎良久,苦口婆心劝荐自己今后要争取把某些代码写的更易用更灵活更完善一些.比如在这篇已经提及到的通用客户端分页显示辅助类(AspNetPager),在大大小小项目中出现频率非常高,但是显然对分页形式的选择和样式的控制弱了点.虽然之前这个功能的实现都是按照实际项目的需求来实现的,对旧项目没有影响,但是这也不能成为该功能没有充分实现扩展性和通用性的理由,这点向来自傲的楼猪也不得不承认. 1.分页模式和样式扩展

  • Asp.Net实现的通用分页函数

    本文实例讲述了Asp.Net实现的通用分页函数.分享给大家供大家参考,具体如下: 功能: 1.每页设置显示9页,超过9页,点5页后的+1页显示(可以随便修改) 2.CSS样式自己可以设置 3.无任何咋代码产生,利于搜索引擎优化 分页程序 objPDS = new PagedDataSource(); objPDS.DataSource = dtTable.DefaultView;//绑定数据源 objPDS.AllowPaging = true; objPDS.PageSize =10;//分页

  • asp的通用数据分页类

    (原创)<!--#include file="Conn.asp" --> 通用数据分页类     通用分页类,以后写分页显示数据时就轻松多啦.直接调用此类,然后再Execute即可以取得当前页的所有数据.     此类所做的工作是只取得当前页的数据,和总页数和总记录数等等数据. ASP代码: <% '/*****************************分页显示类************************** '/* 作者:哇哇鱼 '/* 日期:2004年

  • ASP通用分页样式函数代码

    <% '****************************** '函数:MultiPage(Numbers,Perpage,Curpage,Url_Add) '参数:Numbers,总记录数:Perpage,每页记录数:Curpage,当前页:Url_Add,当前页其它参数如?action=list& '作者:阿里西西 '日期:2007/7/15 '描述:ASP通用分页样式函数 '示例:MultiPage(100,10,2,"?action=list&")

  • PHP分页显示的方法分析【附PHP通用分页类】

    本文实例讲述了PHP分页显示的方法.分享给大家供大家参考,具体如下: <?php header("content-type:text/html;charset=utf-8"); $currentpage = 1; if(isset($_GET['page'])) $currentpage = $_GET['page']; //连接数据库 $link = mysql_connect("localhost","root",""

  • [数据库] 通用分页存储过程第1/5页

    分页存储过程共有四种方式可以实现,行计数.游标.升序-降序.子查询 我记得曾经有人测试过这四种方式的效率分别是 从性能最好到最差的顺序进行的--行计数.游标.升序-降序.子查询 以下是我收集的一些资料供大家参考 QUOTE: 原文地址:http://www.codeproject.com/aspnet/PagingLarge.asp 作者:Jasmin Muharemovic  译者:Tony Qu 下载: 介绍 在Web应用程序中,对一个大数据库结果集进行分页已经是一个家喻户晓的问题了.简单的

  • JSP实现带查询条件的通用分页组件

    分页功能的代码就是这样的,在需要展示列表的页面,我们基本都需要加上分页功能,如果某天boss想要修改分页功能的样式,我们不能去一个一个的改吧. 下边给大家分享一个自己封装的通用分页组件. 1. 效果展示 2. 使用方式 1 )在需要显示分页信息的位置,直接引入pagination.jsp页面. <!-- 分页内容 --> <%@include file="/WEB-INF/decorators/pagination.jsp" %> <!-- 分页内容结束

随机推荐