C#winform的dataGridView控件的分页显示如何实现,请举例
时间: 2024-12-17 17:18:30 浏览: 13
在C# WinForms应用程序中,`DataGridView`控件本身并不直接支持分页功能。然而,你可以通过一些编程技巧来实现分页显示数据。以下是一个实现分页显示的示例:
假设我们有一个包含大量数据的列表,我们希望将其分页显示在`DataGridView`控件中。
### 步骤1:准备数据源
首先,我们需要一个数据源,这里我们使用一个简单的列表来模拟数据源。
```csharp
List<MyData> dataSource = new List<MyData>();
for (int i = 0; i < 100; i++)
{
dataSource.Add(new MyData { Id = i + 1, Name = "Item " + (i + 1) });
}
```
### 步骤2:创建分页逻辑
接下来,我们创建一个方法来实现分页逻辑。这个方法将根据当前页码和每页显示的行数返回相应的数据子集。
```csharp
public List<MyData> GetPagedData(List<MyData> source, int pageNumber, int pageSize)
{
return source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
}
```
### 步骤3:绑定数据到DataGridView
然后,我们将分页后的数据绑定到`DataGridView`控件上。
```csharp
private void BindDataToGridView(int pageNumber, int pageSize)
{
var pagedData = GetPagedData(dataSource, pageNumber, pageSize);
dataGridView1.DataSource = pagedData;
}
```
### 步骤4:添加分页控件
为了方便用户导航不同的页面,我们可以添加一些按钮或标签来控制分页。
```csharp
private int currentPage = 1;
private const int pageSize = 10; // 每页显示10条记录
private void btnPrevious_Click(object sender, EventArgs e)
{
if (currentPage > 1)
{
currentPage--;
BindDataToGridView(currentPage, pageSize);
}
}
private void btnNext_Click(object sender, EventArgs e)
{
if (currentPage < Math.Ceiling((double)dataSource.Count / pageSize))
{
currentPage++;
BindDataToGridView(currentPage, pageSize);
}
}
```
### 完整示例代码
以下是一个完整的示例代码,包括数据源、分页逻辑、数据绑定以及分页控件的事件处理程序。
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
public partial class Form1 : Form
{
private List<MyData> dataSource = new List<MyData>();
private int currentPage = 1;
private const int pageSize = 10; // 每页显示10条记录
public Form1()
{
InitializeComponent();
LoadData();
BindDataToGridView(currentPage, pageSize);
}
private void LoadData()
{
for (int i = 0; i < 100; i++)
{
dataSource.Add(new MyData { Id = i + 1, Name = "Item " + (i + 1) });
}
}
private List<MyData> GetPagedData(List<MyData> source, int pageNumber, int pageSize)
{
return source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
}
private void BindDataToGridView(int pageNumber, int pageSize)
{
var pagedData = GetPagedData(dataSource, pageNumber, pageSize);
dataGridView1.DataSource = pagedData;
}
private void btnPrevious_Click(object sender, EventArgs e)
{
if (currentPage > 1)
{
currentPage--;
BindDataToGridView(currentPage, pageSize);
}
}
private void btnNext_Click(object sender, EventArgs e)
{
if (currentPage < Math.Ceiling((double)dataSource.Count / pageSize))
阅读全文