C#页码导航显示及算法实现代码

当网站中的内容较多时,常常需要用到分页功能来实现良好的用户体验。下面就是C#页码导航的实现。

一、分页算法

如何实现分页?我们需要首先确定一页要显示的记录数(pageSize)和当前页码(currentPageNum),其次需要得到数据表中数据总数(totalCount),然后根据这三个值来计算总的页数(totalPageNum)。

totalPageNum = Math.Ceiling(totalCount / (double)pageSize);

同时,需要考虑到特殊情况,如总记录数为0,或者不足一页时等。

二、C#页码导航代码实现

示例一:实现简单的页码导航功能,代码如下:

public static string GetPageNav(int totalCount, int currentPageNum, int pageSize, string url)
{
    StringBuilder pageNavHtml = new StringBuilder();

    int totalPageNum = (int)Math.Ceiling(totalCount / (double)pageSize);

    if (totalPageNum > 1)
    {
        pageNavHtml.Append("<div class=\"pagination\">");

        if (currentPageNum > 1)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum - 1) + "\">上一页</a>");
        }

        for (int i = 1; i <= totalPageNum; i++)
        {
            if (i == currentPageNum)
            {
                pageNavHtml.Append("<span class=\"current_page\">" + i + "</span>");
            }
            else
            {
                pageNavHtml.Append("<a href=\"" + url + "&page=" + i + "\">" + i + "</a>");
            }
        }

        if (currentPageNum < totalPageNum)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum + 1) + "\">下一页</a>");
        }

        pageNavHtml.Append("</div>");
    }

    return pageNavHtml.ToString();
}

该代码实现了一个简单的分页导航功能,展示形式如下:

上一页 1 2 3 4 5 下一页

示例二:提供了更多的自定义参数,更灵活的用法,代码如下:

public static string GetPageNavCustom(int totalCount, int currentPageNum, int pageSize, string url, string prevText, string nextText, string ellipseText, string currentClass, string pageClass)
{
    StringBuilder pageNavHtml = new StringBuilder();

    int totalPageNum = (int)Math.Ceiling(totalCount / (double)pageSize);

    if (totalPageNum > 1)
    {
        pageNavHtml.Append("<div class=\"pagination\">");

        if (currentPageNum > 1)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum - 1) + "\">" + prevText + "</a>");
        }

        if (totalPageNum <= 7)
        {
            for (int i = 1; i <= totalPageNum; i++)
            {
                if (i == currentPageNum)
                {
                    pageNavHtml.Append("<span class=\"" + currentClass + "\">" + i + "</span>");
                }
                else
                {
                    pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + i + "\">" + i + "</a>");
                }
            }
        }
        else
        {
            int half = 3;
            int start = Math.Max(1, currentPageNum - half);
            int end = Math.Min(start + 6, totalPageNum);

            if (start > 1)
            {
                pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=1\">1</a>");
                pageNavHtml.Append("<span class=\"ellipse\">" + ellipseText + "</span>");
            }

            for (int i = start; i <= end; i++)
            {
                if (i == currentPageNum)
                {
                    pageNavHtml.Append("<span class=\"" + currentClass + "\">" + i + "</span>");
                }
                else
                {
                    pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + i + "\">" + i + "</a>");
                }
            }

            if (end < totalPageNum)
            {
                pageNavHtml.Append("<span class=\"ellipse\">" + ellipseText + "</span>");
                pageNavHtml.Append("<a class=\"" + pageClass + "\" href=\"" + url + "&page=" + totalPageNum + "\">" + totalPageNum + "</a>");
            }
        }

        if (currentPageNum < totalPageNum)
        {
            pageNavHtml.Append("<a href=\"" + url + "&page=" + (currentPageNum + 1) + "\">" + nextText + "</a>");
        }

        pageNavHtml.Append("</div>");
    }

    return pageNavHtml.ToString();
}

该代码实现了一个更加灵活自定义的分页导航功能,展示形式如下:

上一页 1 2 3 4 … 8 下一页

三、总结

以上就是C#页码导航的实现攻略。我们需要首先明确分页算法以及总页数,然后根据自身需求实现自定义的页码导航功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#页码导航显示及算法实现代码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#实现递归算法经典实例

    C#实现递归算法经典实例攻略 什么是递归算法? 递归算法指的是函数自己调用自己,通常用于分治或者回溯的场景,在一些问题中使用递归可以让代码更加简洁和优美。 常见的递归算法问题 1. 阶乘问题 阶乘问题指的是计算n的阶乘(n!)结果。例如,4的阶乘是4 * 3 * 2 * 1 = 24。 阶乘问题的递归解决方法很简单,代码示例: public static i…

    C# 2023年6月6日
    00
  • c#使用windows服务更新站点地图的详细示例

    下面是“c#使用windows服务更新站点地图的详细示例”的完整攻略,本文将由以下几部分组成:需求分析、技术选型、开发流程和实现示例。 需求分析 我们需求是实现一个使用 Windows 服务来自动更新网站地图(SiteMap)的功能。这个服务需要能够自动遍历网站,根据业务逻辑生成站点地图,并更新网站。在此基础上,我们可以选择以特定的时间间隔来调度这个服务。 …

    C# 2023年5月31日
    00
  • C#实现带消息数的App图标

    下面就为大家介绍一下如何用C#实现带消息数的App图标的步骤。 1. 准备工作 首先,你需要创建一个Windows Forms应用程序。然后,从CustomControls目录(你需要从NuGet中安装此组件)中添加一个NotifyIcon控件并将其拖放到你的主窗体中。 2. 实现带消息数的App图标 要实现带消息数的App图标,我们需要设置NotifyIc…

    C# 2023年6月1日
    00
  • C#打印日志的方法总结

    针对“C#打印日志的方法总结”,以下是详细的攻略: 什么是日志 在开发过程中,我们需要记录一些关键信息来方便排查问题或者进行后续分析。而日志就是我们记录这些信息的工具。日志可以记录程序运行时的各种信息,包括但不限于:debug信息、错误堆栈信息、请求和响应信息等。而我们可以使用一些工具来进行日志的打印和管理。 C#中的日志打印方法 1.使用Trace和Deb…

    C# 2023年5月15日
    00
  • 关于c#中单例模式的一些问题

    下面给您详细讲解关于C#中单例模式的一些问题。 什么是单例模式? 单例模式是一种常见的设计模式,其定义为:确保一个类只有一个实例,并提供一个全局访问点。这意味着在整个应用程序中,只会有一个该类的实例存在,而且该实例可以被任何部分访问并进行更改。 为什么要使用单例模式? 单例模式主要用于节省系统资源,因为在某些情况下,多个实例的存在会带来很大的性能影响,而只有…

    C# 2023年6月7日
    00
  • 区分c# 前台和后台线程

    要区分C#前台和后台线程,主要是要理解它们之间的区别以及相应的使用场景。以下是区分C#前台和后台线程的完整攻略: 什么是前台线程和后台线程 前台线程 前台线程是指在应用程序的主线程中创建的线程,这些线程会阻止应用程序的终止,只有在所有前台线程执行完成后应用程序才会退出。 后台线程 后台线程是指在应用程序中创建的没有阻止应用程序终止的线程,当所有前台线程都执行…

    C# 2023年6月7日
    00
  • .NetCore利用BlockingCollection实现简易消息队列

    .NET Core利用BlockingCollection实现简易消息队列 在.NET Core应用程序中,我们可以使用BlockingCollection类来实现简易消息队列。本攻略将详细介绍如何使用BlockingCollection类来实现简易消息队列,并提供两个示例说明。 BlockingCollection类 BlockingCollection类…

    C# 2023年5月17日
    00
  • C#读取文件所有行到数组的方法

    C#中读取文件所有行到数组的方法有多种,以下分别介绍: 方法一:使用File.ReadAllLines()方法 使用File.ReadAllLines()可以方便地将文件中的行读取到字符串数组中。 string[] lines = File.ReadAllLines("test.txt"); 其中,”test.txt”为待读取的文件路径。…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部