在C#中,我们可以使用DataTable来实现分页。以下是一个示例方法,该方法接收一个DataTable、页码(PageIndex)和每页的记录数(PageSize),然后返回一个包含分页后数据的DataTable。
```csharp
using System;
using System.Collections.Generic;
using System.Data;
public class DataTablePagination
{
public static DataTable GetPagedTable(DataTable dt, int pageIndex, int pageSize)
{
if (pageIndex == 0) return dt; // 0页代表每页数据,直接返回
DataTable newDt = dt.Copy(); // 复制原始DataTable
newDt.Clear(); // 清除新DataTable的索引
int startRowIndex = (pageIndex - 1) * pageSize; // 计算起始行索引
int endRowIndex = Math.Min(startRowIndex + pageSize, dt.Rows.Count); // 计算结束行索引
if (startRowIndex >= dt.Rows.Count) return newDt; // 如果起始行索引大于等于总行数,则直接返回新的空DataTable
if (endRowIndex > dt.Rows.Count) endRowIndex = dt.Rows.Count; // 如果结束行索引大于总行数,则设置为总行数
for (int i = startRowIndex; i <= endRowIndex - 1; i++) // 遍历并添加数据行到新的DataTable中
{
DataRow newDr = newDt.NewRow();
DataRow dr = dt.Rows[i];
foreach (DataColumn column in dt.Columns)
{
newDr[column.ColumnName] = dr[column.ColumnName];
}
newDt.Rows.Add(newDr);
}
return newDt; // 返回分页后的DataTable
}
}
```
使用此方法时,只需将原始DataTable、所需的页码和每页的记录数作为参数传递即可。例如:
```csharp
DataTable originalDt = new DataTable();
// 填充originalDt的数据...
int pageIndex = 2; // 获取第2页数据,假设每页有5条记录
int pageSize = 5; // 每页5条记录
DataTable paginatedDt = DataTablePagination.GetPagedTable(originalDt, pageIndex, pageSize); // 获取分页后的DataTable
```