在C#中实现一个页码导航的显示及算法,通常涉及计算总页数、当前页码、起始页码和结束页码等。以下是一个简单的示例,展示如何在C#中根据总记录数、每页显示记录数和当前页码来计算并显示页码导航。
using System;
public class PaginationHelper
{
// 计算总页数
public static int CalculateTotalPages(int totalRecords, int recordsPerPage)
{
return (int)Math.Ceiling((double)totalRecords / recordsPerPage);
}
// 生成页码导航字符串
public static string GeneratePagination(int currentPage, int totalPages, int pageSize = 10)
{
if (totalPages <= 1)
{
return "1";
}
var pagination = new System.Text.StringBuilder();
// 简化处理,这里只显示当前页前后各两页,以及首尾页
int startPage = Math.Max(1, currentPage - 2);
int endPage = Math.Min(totalPages, currentPage + 2);
// 如果起始页小于3,显示前3页
if (startPage < 3 && totalPages > 3)
{
endPage = Math.Min(totalPages, 5);
}
// 如果结束页大于总页数减2,显示最后3页
if (endPage > totalPages - 2 && totalPages > 3)
{
startPage = Math.Max(1, totalPages - 4);
}
// 添加页码
for (int i = startPage; i <= endPage; i++)
{
pagination.AppendFormat("{0} ", i);
// 如果是当前页,则加粗显示(这里用*代替加粗)
if (i == currentPage)
{
pagination.Append("*");
}
}
// 如果总页数大于显示范围,添加省略号
if (startPage > 1)
{
pagination.Insert(0, "1 ... ");
}
if (endPage < totalPages)
{
pagination.AppendFormat(" ... {0}", totalPages);
}
return pagination.ToString().Trim();
}
// 示例用法
public static void Main(string[] args)
{
int totalRecords = 100; // 总记录数
int currentPage = 5; // 当前页码
int recordsPerPage = 10; // 每页显示记录数
int totalPages = CalculateTotalPages(totalRecords, recordsPerPage);
string pagination = GeneratePagination(currentPage, totalPages, recordsPerPage);
Console.WriteLine($"Total Pages: {totalPages}");
Console.WriteLine($"Pagination: {pagination}");
}
}
在这个示例中,`CalculateTotalPages` 方法用于计算总页数,而 `GeneratePagination` 方法则用于生成页码导航的字符串表示。在 `Main` 方法中,我们设置了总记录数、当前页码和每页显示记录数,并调用了这两个方法来计算总页数和生成页码导航字符串。
请注意,这个示例中的页码导航生成逻辑是简化的,主要为了展示如何计算页码和生成基本的页码导航字符串。在实际应用中,您可能需要根据具体需求调整页码导航的显示逻辑和样式。