分页工具-PageUtil
# 简介
分页工具类并不是数据库分页的封装,而是分页方式的转换。在我们手动分页的时候,常常使用页码+每页个数的方式,但是有些数据库需要使用开始位置和结束位置来表示。很多时候这种转换容易出错(边界问题),于是封装了PageUtil工具类。
以下是PageUtil类的方法及其描述:
PageUtil
:使用指定数据源、排序字段、排序方式、当前页码和每页大小初始化分页工具类。SortDataSource
:对数据源进行排序。GetData
:获取当前页的数据。HasPreviousPage
:判断是否有上一页。HasNextPage
:判断是否有下一页。GetPreviousPage
:获取上一页的页码。GetNextPage
:获取下一页的页码。GetTotalPage
:获取总页数。GetTotalRecord
:获取总记录数。GetCurrentPage
:获取当前页码。GetPageSize
:获取每页大小。SetCurrentPage
:设置当前页码。SetPageSize
:设置每页大小,并重新计算总页数。SetOrderField
:设置排序字段和排序方式,并重新对数据源进行排序。GetPaginationHtml
:获取分页HTML代码,使用分页彩虹算法。
# EasyTool.PageUtil 类
静态工具类 PageUtil,是一个C#的分页工具类,它可以方便地进行分页查询和显示。该工具类支持多种数据源和多种排序方式的分页,同时还提供了常用的分页查询方法和分页彩虹算法的实现。其中,分页彩虹算法用于生成分页链接,它可以将当前页码前后的几个页码显示为分页链接,并通过省略号(...)来表示中间的页码。通过PageUtil类,可以方便地获取当前页的数据、判断是否有上一页和下一页、获取上一页和下一页的页码、获取总页数和总记录数等信息。此外,PageUtil还提供了设置当前页码、设置每页大小、设置排序字段和排序方式等方法,以及获取分页HTML代码的方法。
# PageUtil
/// <summary>
/// 构造函数,使用指定数据源、当前页码和每页大小初始化分页工具类
/// </summary>
/// <param name="dataSource">数据源</param>
/// <param name="currentPage">当前页码,默认为1</param>
/// <param name="pageSize">每页大小,默认为10</param>
public PageUtil(List<T> dataSource, int currentPage = 1, int pageSize = 10)
/// <summary>
/// 构造函数,使用指定数据源、排序字段、排序方式、当前页码和每页大小初始化分页工具类
/// </summary>
/// <param name="dataSource">数据源</param>
/// <param name="orderField">排序字段</param>
/// <param name="isAsc">是否升序</param>
/// <param name="currentPage">当前页码,默认为1</param>
/// <param name="pageSize">每页大小,默认为10</param>
public PageUtil(List<T> dataSource, Func<T, object> orderField, bool isAsc, int currentPage = 1, int pageSize = 10)
# GetPaginationHtml-分页彩虹算法
/// <summary>
/// 获取分页HTML代码,使用分页彩虹算法
/// </summary>
/// <param name="urlFormat">分页链接格式,其中{0}会被替换为实际的页码</param>
/// <param name="currentPageClass">当前页码的CSS类名,用于设置当前页码的样式,默认为"current"</param>
/// <param name="range">分页彩虹算法中的一个重要参数,用于控制分页链接的数量,默认为5</param>
/// <returns>分页HTML代码</returns>
public string GetPaginationHtml(string urlFormat, string currentPageClass = "current", int range = 5)
# SortDataSource-对数据源进行排序
/// <summary>
/// 对数据源进行排序
/// </summary>
private void SortDataSource()
# GetData-获取当前页的数据
/// <summary>
/// 获取当前页的数据
/// </summary>
/// <returns>当前页的数据</returns>
public List<T> GetData()
# HasPreviousPage-判断是否有上一页
/// <summary>
/// 判断是否有上一页
/// </summary>
/// <returns>如果有上一页,返回true
public bool HasPreviousPage()
# HasNextPage-判断是否有下一页
/// <summary>
/// 判断是否有下一页
/// </summary>
/// <returns>如果有下一页,返回true</returns>
public bool HasNextPage()
# GetPreviousPage-获取上一页的页码
/// <summary>
/// 获取上一页的页码
/// </summary>
/// <returns>上一页的页码,如果当前页是第一页,则返回1</returns>
public int GetPreviousPage()
# GetNextPage-获取下一页的页码
/// <summary>
/// 获取下一页的页码
/// </summary>
/// <returns>下一页的页码,如果当前页是最后一页,则返回总页数</returns>
public int GetNextPage()
# GetTotalPage-获取总页数
/// <summary>
/// 获取总页数
/// </summary>
/// <returns>总页数</returns>
public int GetTotalPage()
# GetTotalRecord-获取总记录数
/// <summary>
/// 获取总记录数
/// </summary>
/// <returns>总记录数</returns>
public int GetTotalRecord()
# GetCurrentPage-获取当前页码
/// <summary>
/// 获取当前页码
/// </summary>
/// <returns>当前页码</returns>
public int GetCurrentPage()
# GetPageSize-获取每页大小
/// <summary>
/// 获取每页大小
/// </summary>
/// <returns>每页大小</returns>
public int GetPageSize()
# SetCurrentPage-设置当前页码
/// <summary>
/// 设置当前页码
/// </summary>
/// <param name="currentPage">当前页码</param>
public void SetCurrentPage(int currentPage)
# SetPageSize-设置每页大小,并重新计算总页数
/// <summary>
/// 设置每页大小,并重新计算总页数
/// </summary>
/// <param name="pageSize">每页大小</param>
public void SetPageSize(int pageSize)
# SetOrderField-设置排序字段和排序方式,并重新对数据源进行排序
/// <summary>
/// 设置排序字段和排序方式,并重新对数据源进行排序
/// </summary>
/// <param name="orderField">排序字段</param>
/// <param name="isAsc">是否升序</param>
public void SetOrderField(Func<T, object> orderField, bool isAsc)
# 使用示例
假设我们有一个PageUtil实例名为pageUtil,其中的分页链接格式为"/list?page={0}",当前页码的CSS类名为"current",分页彩虹算法的range值为5,我们可以使用以下代码生成分页HTML代码:
pageUtil.SetCurrentPage(3);
string paginationHtml = pageUtil.GetPaginationHtml("/list?page={0}", "current", 5);
Console.WriteLine(paginationHtml);
执行以上代码后,输出结果如下所示:
<a href="/list?page=1">1</a><span>...</span><a href="/list?page=2">2</a><span class="current">3</span><a href="/list?page=4">4</a><a href="/list?page=5">5</a><span>...</span><a href="/list?page=10">10</a>
以上输出结果中,当前页码为3,分页链接范围为当前页码前后各5个,使用省略号(...)来表示中间的页码。其中,第一个分页链接为第一页,最后一个分页链接为最后一页。
上次更新: 2023/04/26, 22:10:06