c# asp.net 实现分页(pager)功能

分页PagerHelper辅助类

using System;
using System.Web;
public class PagerHelper
{
    #region 获取分页的Html代码
    /// <summary>
    /// 获取分页的Html代码
    /// 当前页码方法内部根据Request["page"]获取
    /// </summary>
    /// <param name="pageSize">每一页数量</param>
    /// <param name="totalCount">总数量</param>
    /// <param name="url">伪静态地址如/news/list-1-{0}.html</param>
    /// <param name="maxPageNum">最多显示的页码个数(100页 每次只显示8个其他隐藏)</param>
    /// <returns></returns>
    public static string GetPageHtml(int pageSize, int totalCount, string url, int maxPageNum = 8)
    {
        HttpRequest Request = HttpContext.Current.Request;
        int curPageIndex = 1;
        if (!string.IsNullOrWhiteSpace(Request["page"]))
        {
            curPageIndex = Convert.ToInt32(Request["page"] ?? "1");
            curPageIndex = curPageIndex <= 0 ? 1 : curPageIndex;
        }

        System.Text.StringBuilder pageHtml = new System.Text.StringBuilder();
        //if (pageIndex > 1)
        //{
        pageHtml.Append(curPageIndex == 1 ? "<a href=\"javascript:void(0);\">首页</a>" : "<a   href=\"" + string.Format(url, 1) + "\">首页</a>");
        pageHtml.Append(curPageIndex > 1 ? "<a href=\"" + string.Format(url, curPageIndex - 1) + "\">上一页</a>" : "<a href=\"javascript:void(0);\">上一页</a>");
        //}
        int pageCount = GetPageCount(pageSize, totalCount);//总页码
        //获取显示区域第一个开始位置 如 1 9 17
        int firstNum = curPageIndex % maxPageNum == 0 ? curPageIndex - (maxPageNum - 1) : curPageIndex - curPageIndex % maxPageNum + 1;
        if (firstNum > maxPageNum)
        {
            pageHtml.Append("<a   href=\"" + string.Format(url, firstNum - 1) + "\">...</a>");
        }

        for (int i = firstNum; i < firstNum + maxPageNum; i++)
        {
            if (i > pageCount) break;
            string css = string.Empty;
            if (i == curPageIndex)
            {
                css = "class=\"currentpage\"";
            }
            pageHtml.Append("<a " + css + " href=\"" + string.Format(url, i) + "\">" + i + "</a>");

        }
        if (pageCount >= firstNum + maxPageNum)
        {
            pageHtml.Append("<a   href=\"" + string.Format(url, firstNum + maxPageNum) + "\">...</a>");
        }
        //if (pageCount > curPageIndex)
        //{
        pageHtml.Append(curPageIndex < pageCount ? "<a href=\"" + string.Format(url, curPageIndex + 1) + "\">下一页</a>" : "<a href=\"javascript:void(0);\">下一页</a>");
        pageHtml.Append("<a href=\"" + string.Format(url, pageCount) + "\">尾页</a>");
        //}
        pageHtml.Append(string.Format("<a href=\"javascript:void(0);\">共{0}页,{1}条</a>", pageCount, totalCount));
        return pageHtml.ToString();
    }

    #endregion

    #region 获取页码总数
    /// <summary>
    /// 获取页码总数
    /// </summary>
    /// <param name="pageSize">每一页 数量</param>
    /// <param name="totalCount">总数量</param>
    /// <returns></returns>
    private static int GetPageCount(int pageSize, int totalCount)
    {
        int pageNumbers = 0;
        if (totalCount % pageSize != 0)
        {
            pageNumbers = totalCount / pageSize + 1;
        }
        else
        {
            pageNumbers = totalCount / pageSize;
        }
        pageNumbers = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(totalCount) / Convert.ToDouble(pageSize)));
        return pageNumbers;
    }
    #endregion

}

  前台使用

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, i { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; }
        body { background: #fff; font: 12px/1.5 Tahoma; color: #000; }
        a { text-decoration: none; cursor: pointer; }
        /*分页*/
        .page { clear: both; text-align: center; margin-top: 10px; margin-bottom: 20px; }
        .page a { border: 1px solid #dbdbdb; background: #fff; padding: 5px 10px; margin: 1px; display: inline-block; color: #000; }
        .page a:hover { text-decoration: none; background-color: #2196F3; color: #fff; }
        .page span a { border: 1px solid #1f5b13; background: #fff; padding: 2px 7px; margin: 1px; display: inline-block; color: #104c00; }
        .page span a:hover { text-decoration: none; background-color: #a3c79c; }
        .page .currentpage { background-color: #ff8800; color: #fff; }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div class="page">
            <asp:Literal runat="server" ID="ltHtml"></asp:Literal>
        </div>
    </form>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            ltHtml.Text = PagerHelper.GetPageHtml(3, 33, "/tpager_demo.aspx?page={0}");
        }
    </script>
</body>
</html>

预览图  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

系统需要越来越自动化,我们需要引入日志记录和异常捕获 管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。 系统的异...

2848
来自专栏逸鹏说道

Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程案例演示

Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3T...

3377
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作

最近比较忙,系统难度独步增加,文章的发布速度明显比以前慢了。 由于我们已经跑通了整个系统,所有东西都回到了简单,接下来我们做模块制作也就是操作SysModule...

2208
来自专栏偏前端工程师的驿站

GridView实战二:使用ObjectDataSource数据源控件

前言:   ObjectDataSource数据源控件优点甚多,确实令人爱不惜手,但不支持重绑定这一项确实让人失望。下面的实战二将通过ObjectDataSou...

26610
来自专栏码农阿宇

C# MVC的一种高效分页的html方法

首先创建一个html的扩展方法,这个方法是万能的,可以直接拿到您的项目中使用: //主要就是输出分页的超级链接的标签 //自定义分页Helpe...

44811
来自专栏林德熙的博客

win10 uwp 设置 HttpClient 浏览器标识

最近在使用 smms 图床上传发现需要使用 UserAgent ,不然不会返回值。 所以我就询问了群里大神,他们告诉我需要设置 UserAgent ,本文就是告...

772
来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块

接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权给用户 给用户分配角色组 所以最少我们还要讲多5讲才能结束这个管理系统,经过之前的样例程序...

3039
来自专栏web开发

angularjs自定义指令实现分页插件

由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能。现在单独做了个简易的小demo,主要是为...

25510
来自专栏汪毅雄的专栏

Android 7.0 中 ContentProvider 实现原理

本文描述了 ContentProvider 发布者和调用者这两在 Framework 层是如何实现的。

7042
来自专栏飞扬的花生

C#实现Excel模板导出和从Excel导入数据

      午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 ? 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.O...

4577

扫码关注云+社区