DataGridView使用BindingNavigator实现简单分页功能

网络编程 2025-04-20 12:30www.168986.cn编程入门

使用BindingNavigator实现DataGridView分页功能

今天我们要一个有趣的话题——如何利用BindingNavigator为DataGridView赋予简单的分页功能。实际上,这只需巧妙借用BindingNavigator的“空壳”。

我们创建一个名为BindingNavigatorMain的WinForm程序。在这个程序中,我们将添加一个DataGridView控件和一个BindingNavigator控件。在BindingNavigator的右下角弹窗中,我们要增加一个“转到”按钮。想象一下,这样一个界面呈现出来的效果,绝对会让你的程序增色不少。

接下来,让我们深入了解代码部分。我们需要定义几个关键的变量:每页显示的记录数(pageSize)、当前页码(pageIndex)、总记录数(totalCount)以及总页数(pageCount)。在BindingNavigatorMain的构造函数中,我们初始化这些变量并设置事件处理程序。

当我们的程序加载时,我们在Load事件中设置每页显示的记录数(pageSize)和初始页码(pageIndex)。然后,我们调用SetPage方法来设置页数和总记录数。这个方法首先获取总记录数,然后根据每页的记录数和总记录数来计算总页数。接着,我们更新当前页码和总页数的显示。最后一步虽然看似简单,但却至关重要——我们不需要为BindingNavigator数据源赋值,但要确保控件的可用性。

我们激活导航控件的各个按钮以及当前页和总页数的显示。这样一来,用户就可以开始浏览数据了。

对于绑定页面,我们需要设置每页显示的记录数、当前的页码以及总记录数。为此,我们连接到数据库,执行存储过程,并获取必要的信息。数据库连接测试区域如下:

尝试连接数据库。使用特定的连接字符串连接到测试数据库。然后,创建一个SqlCommand对象,并设置相应的参数来传递页大小、页码和总记录数的输出值。我们创建一个DataTable来存储查询结果,并添加必要的列。

接下来,使用SqlDataReader从数据库中读取数据并加载到DataTable中。从参数中获取总记录数,并将DataTable数据源绑定到DataGridView上。我们也尝试了使用SqlDataAdapter的方法来填充DataTable。

当点击导航控件的“首页”按钮时,我们将页码设置为0并更新页面。点击“上一页”时,我们会减少页码,但确保它不会小于0。类似地,点击“”会增加页码,但不会超过总页数。当点击“末页”时,我们会直接将页码设置为总页数减1。

对于当前页码输入框,我们只允许输入0-9的数字、Delete键、Enter键和Backspace键。如果用户输入了其他键,事件将被处理并阻止输入。当用户点击“指定页”按钮或按下Enter键时,会触发Go方法,进行页面的跳转和数据的重新加载。

在Go方法中,我们首先检查当前页码输入框是否为空。如果为空,我们会显示一个提示消息框,告知用户“指定页不能为空”。如果不为空,我们会根据输入的页码跳转到相应的页面并更新数据显示。

使用BindingNavigator在DataGridView中实现分页功能

一、背景介绍

在使用DataGridView展示数据时,为了提高用户体验,我们常常需要实现分页功能。本文将介绍如何通过BindingNavigator实现这一功能,并以一个简单的实例说明操作过程。我们还会在SQL Server中创建存储过程PageTest的方法,以便更高效地处理分页请求。

二、代码实现

在实现分页功能之前,我们需要先进行一些条件判断。例如,当输入的当前页码小于1或超过总页数时,我们显示一个提示信息,并将焦点回到输入框。如果输入的条件合法,我们就根据当前页码设置页面。

以下是C代码示例:

```csharp

// 条件判断及页面设置

if (int.Parse(txtCurrentPage.Text) < 1)

{

MessageBox.Show("请输入正确的页码。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

txtCurrentPage.Focus();

return;

}

else if (int.Parse(txtCurrentPage.Text) > pageCount)

{

MessageBox.Show("指定页已超过总页数。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

txtCurrentPage.Focus();

return;

}

else

{

pageIndex = int.Parse(txtCurrentPage.Text) - 1; // 页码从0开始计数,所以要减一

SetPage(); // 设置页面信息,具体实现根据实际业务逻辑编写。

}

```

接下来,我们介绍如何在SQL Server中创建一个名为PageTest的存储过程。这个存储过程接受每页显示的记录数(PageSize)、当前页码(PageIndex)以及一个输出参数总记录数(TotalCount)。存储过程内部使用了动态SQL来构建查询语句,这样可以避免参数嗅探问题并显著提高效率。下面是存储过程的创建代码:

```sql

CREATE PROCEDURE [dbo].[PageTest]

@PageSize INT,

@PageIndex INT,

@TotalCount INT OUTPUT

AS

BEGIN

-- 计算总记录数

SELECT @TotalCount = COUNT(1) FROM MF_MO

-- 构建并执行动态SQL查询语句,返回指定页的数据

DECLARE @SQL NVARCHAR(1000)

SET @SQL = 'SELECT TOP (' + CONVERT(VARCHAR(32), @PageSize) + ') MO_NO, MRP_NO, QTY, BIL_NO FROM MF_MO A WHERE NOT EXISTS (SELECT 1 FROM (SELECT TOP (' + CONVERT(VARCHAR(32), (@PageIndex - 1) @PageSize) + ') MO_NO FROM MF_MO ORDER BY MO_NO) B WHERE A.MO_NO = B.MO_NO) ORDER BY MO_NO'

EXEC (@SQL)

END

```

三、执行程序及总结

完成以上步骤后,你就可以执行程序了。本文介绍了如何通过BindingNavigator在DataGridView中实现分页功能,以及如何在SQL Server中创建分页存储过程的方法。希望对有此需求的朋友有所帮助。如有任何疑问或建议,请留言交流。感谢大家支持狼蚁SEO网站!如需转载本文,请标明出处。

四、版权声明及推广信息:本文版权归长沙网络推广所有,未经许可请勿随意转载。如果您觉得本文对您有帮助,请支持我们并关注我们的网站推广信息。更多精彩内容,请访问我们的官方网站了解更多详情。我们也欢迎各位朋友通过搜索引擎搜索我们的网站进行访问和咨询。谢谢大家的支持!

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by