WinForm 应用程序中 DataGridView 的简单分页方法
轻松分页 DataGridView 的简单方法。
引言
我最近在 WinForm 应用程序的 DataGridView
中实现了分页功能。我在网上搜索过,但通常发现代码非常复杂。因此,我想编写易于理解的代码,让每个人都能理解。经过一些修改,我努力使我的代码真正简单,并希望与大家分享。
我使用了按钮控件来实现导航切换。
我添加了所需的变量,例如 PgSize
用于每页的行数,CurrentPageIndex
用于当前页索引,以及 Totalpage
用于计算 DataGridView
能够显示的最大页数。
private int PgSize = 20;
private int CurrentPageIndex = 1;
private int TotalPage=0;
顾名思义,以下方法用于计算 gridview
的总页数
private void CalculateTotalPages()
{
int rowCount = ds.Tables["Customers"].Rows.Count;
TotalPage = rowCount / PgSize;
// if any row left after calculated pages, add one more page
if (rowCount % PgSize > 0)
TotalPage += 1;
}
为了检索要显示的已导航页面的记录,我使用了从 GetCurrentRecord()
方法返回的 DataTable
作为 gridview
的 datasource
。如果导航的页面是第一页,则此方法返回前 20 行(PgSize
变量的 Size
)。如果导航的页面大于 1,则它通过以下代码行计算先前的 pageOffset
int PreviousPageOffSet= (page - 1) * PgSize;
现在查询工作开始,只选择当前页面的页面,并留下之前的记录,应用以下代码中的查询
private DataTable GetCurrentRecords(int page, SqlConnection con)
{
DataTable dt = new DataTable();
if (page == 1)
{
cmd2 = new SqlCommand("Select TOP " + PgSize +
" * from Customers ORDER BY CustomerID", con);
}
else
{
int PreviousPageOffSet= (page - 1) * PgSize;
cmd2 = new SqlCommand("Select TOP " + PgSize +
" * from Customers WHERE CustomerID NOT IN " +
"(Select TOP " + PreviousPageOffSet+
" CustomerID from customers ORDER BY CustomerID) ", con);
}
try
{
// con.Open();
this.adp1.SelectCommand = cmd2;
this.adp1.Fill(dt);
}
finally
{
con.Close();
}
return dt;
}
导航按钮与往常一样。在这里,我们只计算导航的 pageIndex
并将其作为参数传递给 GetCurrentRecords()
方法,以检索 datagridview
的 dataSource
。
private void btnFirstPage_Click(object sender, EventArgs e)
{
this.CurrentPageIndex = 1;
this.dataGridView1.DataSource = GetCurrentRecords(this.CurrentPageIndex, con);
}
private void btnNxtPage_Click(object sender, EventArgs e)
{
if (this.CurrentPageIndex < this.TotalPage)
{
this.CurrentPageIndex++;
this.dataGridView1.DataSource =
GetCurrentRecords(this.CurrentPageIndex, con);
}
}
private void btnPrevPage_Click(object sender, EventArgs e)
{
if (this.CurrentPageIndex > 1)
{
this.CurrentPageIndex--;
this.dataGridView1.DataSource =
GetCurrentRecords(this.CurrentPageIndex, con);
}
}
private void btnLastPage_Click(object sender, EventArgs e)
{
this.CurrentPageIndex = TotalPage;
this.dataGridView1.DataSource = GetCurrentRecords(this.CurrentPageIndex, con);
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
我希望这是为 DataGridView
分页的最简单方法。
这是我发布的第一篇文章,我尽力解释了我的代码。因此,我欢迎任何类型的建议。
历史
- 2011 年 6 月 15 日:初始版本