[http://www.51sp.info/ C# asp .net Java视频教程 中美爱梯最新最全C# ASP .NET外企工程师课程]

客服QQ:40002528 点击这里给我发消息

在使用ASP.NET编程时,如果不用控件的默认分页功能,想自己搞一个,可以看看本文的asp.net通用分页显示辅助类哦。

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

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

        Center = 2,

        Right = 3
    }

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

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

[http://www.51sp.info/ C# asp .net Java视频教程 中美爱梯最新最全C# ASP .NET外企工程师课程]

客服QQ:40002528 点击这里给我发消息

(2)根据枚举呈现

 Code
 /// <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(“&nbsp;<a href=’javascript:void(0);’ style=’color:red;’ >{0}</a>”, nowPage.ToString());
                }
                else
                {
                    sb.AppendFormat(“&nbsp;<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(“&nbsp;<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>页&nbsp;&nbsp;”,
                totalCount, pageCount, nowPage);
            sb.Append(numricPager);
            return sb.ToString();
        }

        #endregion
    }

ps1:除了表格内容对齐方式外,代码里对样式的控制几乎都是硬编码,个人认为编码阶段对样式的控制越少越好。理想状态下,样式应该让UI全部在外部控制,而不应该由程序员来设计实现,这里结合实际情况取折中方案。
ps2:分页显示的方式其实还可以扩展,具体请参考gridview控件分页模式。

[http://www.51sp.info/ C# asp .net Java视频教程 中美爱梯最新最全C# ASP .NET外企工程师课程]

客服QQ:40002528 点击这里给我发消息

下面说下调用方法:
2、页面内调用

 Code
<%@ 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>

posted on 2010-09-12 22:32  简约代码  阅读(755)  评论(0编辑  收藏  举报