vb.net DataGrid Windows 控件执行分页
2012-06-19 08:41
351 查看
http://support.microsoft.com/kb/305271/zh-cn
DataGrid Web 控件有内置的自动或自定义分页功能,但是 DataGrid Windows 控件却没有这些功能。本文介绍如何为 DataGrid Windows 控件生成简单的分页机制。
本文中的代码示例利用了数据集对象。在 ADO.NET 中,数据集对象是通过单次操作填充的,它们始终驻留在内存中。如果您在使用一个大型数据集,本文介绍如何以编程方式按块区或页面形式显示数据。
此技巧有一些局限性。有关更多信息,请参阅疑难解答一节。
回到顶端
Microsoft Visual Basic .NET
Microsoft SQL Server Northwind 示例数据库
回到顶端
当您对 DataGrid 进行分页时,您会在页面大小的"块区"中显示数据,也即,一次显示一页记录。下面的代码示例将每页的 DataRow 对象从内存中的数据集复制到一个临时表中。该临时表然后会绑定到 DataGrid 控件。
打开一个新的 Visual Basic .NET Windows 应用程序。默认情况下将创建 Form1。
添加 DataGrid 控件,将其 ReadOnly 属性设置为 True。
将以下附加控件添加到 Form1 上,然后按如下所示设置它们的属性:
复制下面的代码并粘贴到 Form1 的 General Declaration 部分:
复制下面的代码并粘贴到"Windows Form Designer generated code"区域之前 以声明 Form1 的窗体层次变量:
删除 Form1 的 Load 事件自动生成的下列代码。
复制下面的代码并粘贴到"Windows Form Designer generated code"区域之后:
修改代码中的 ConnectionString 参数以使它指向罗斯文 (Northwind) 数据库的一个现有实例。
按 F5 键生成并运行此项目。
默认情况下,将"页大小"设置为 5 个记录,您可以在文本框中更改它。
单击填充网格。注意,网格中填入了 5 个记录。
单击第一页、下一页、上一页 和最后一页可以在不同的页面之间浏览。
DataGrid Web 控件有内置的自动或自定义分页功能,但是 DataGrid Windows 控件却没有这些功能。本文介绍如何为 DataGrid Windows 控件生成简单的分页机制。
本文中的代码示例利用了数据集对象。在 ADO.NET 中,数据集对象是通过单次操作填充的,它们始终驻留在内存中。如果您在使用一个大型数据集,本文介绍如何以编程方式按块区或页面形式显示数据。
此技巧有一些局限性。有关更多信息,请参阅疑难解答一节。
回到顶端
要求
Microsoft Visual Basic .NETMicrosoft SQL Server Northwind 示例数据库
回到顶端
向 DataGrid Windows 控件添加分页的步骤
当您对 DataGrid 进行分页时,您会在页面大小的"块区"中显示数据,也即,一次显示一页记录。下面的代码示例将每页的 DataRow 对象从内存中的数据集复制到一个临时表中。该临时表然后会绑定到 DataGrid 控件。打开一个新的 Visual Basic .NET Windows 应用程序。默认情况下将创建 Form1。
添加 DataGrid 控件,将其 ReadOnly 属性设置为 True。
将以下附加控件添加到 Form1 上,然后按如下所示设置它们的属性:
Control | Name Property | Text Property |
---|---|---|
Button | btnFirstPage | First Page |
Button | btnNextPage | Next Page |
TextBox | txtDisplayPageNo | |
Button | btnPreviousPage | Previous Page |
Button | btnLastPage | Last Page |
TextBox | txtPageSize | 5 |
Button | btnFillGrid | Fill Grid |
Imports System Imports System.Data Imports System.Data.SqlClient
复制下面的代码并粘贴到"Windows Form Designer generated code"区域之前 以声明 Form1 的窗体层次变量:
Private da As SqlDataAdapter Private ds As DataSet Private dtSource As DataTable Private PageCount As Integer Private maxRec As Integer Private pageSize As Integer Private currentPage As Integer Private recNo As Integer
删除 Form1 的 Load 事件自动生成的下列代码。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load End Sub
复制下面的代码并粘贴到"Windows Form Designer generated code"区域之后:
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'Open Connection. Dim conn As SqlConnection = New SqlConnection( _ "Server=(local)\netsdk;uid=sa;pwd=;database=northwind") 'Set the DataAdapter's query. da = New SqlDataAdapter("select * from customers", conn) ds = New DataSet() ' Fill the DataSet. da.Fill(ds, "customers") ' Set the source table. dtSource = ds.Tables("customers") End Sub Private Sub btnNextPage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnNextPage.Click 'If the user did not click the "Fill Grid" button then Return If Not CheckFillButton() Then Return 'Check if the user clicked the "Fill Grid" button. If pageSize = 0 Then MessageBox.Show("Set the Page Size, and then click the ""Fill Grid"" button!") Return End If currentPage = currentPage +1 If currentPage > PageCount Then currentPage = PageCount ' Check if you are already at the last page. If recNo = maxRec Then MessageBox.Show("You are at the Last Page!") Return End If End If LoadPage() End Sub Private Sub btnPreviousPage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnPreviousPage.Click If Not CheckFillButton() Then Return If currentPage = PageCount Then recNo = pageSize * (currentPage -2) End If currentPage = currentPage - 1 ' Check if you are already at the first page. If currentPage < 1 Then MessageBox.Show("You are at the First Page!") currentPage = 1 Return Else recNo = pageSize * (currentPage - 1) End If LoadPage() End Sub Private Sub LoadPage() Dim i As Integer Dim startRec As Integer Dim endRec As Integer Dim dtTemp As DataTable Dim dr As DataRow 'Duplicate or clone the source table to create the temporary table. dtTemp = dtSource.Clone If currentPage = PageCount Then endRec = maxRec Else endRec = pageSize * currentPage End If startRec = recNo 'Copy the rows from the source table to fill the temporary table. For i = startRec To endRec - 1 dtTemp.ImportRow(dtSource.Rows(i)) recNo = recNo + 1 Next DataGrid1.DataSource = dtTemp DisplayPageInfo() End Sub Private Sub btnFirstPage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnFirstPage.Click If Not CheckFillButton() Then Return ' Check if you are already at the first page. If currentPage = 1 Then MessageBox.Show("You are at the First Page!") Return End If currentPage = 1 recNo = 0 LoadPage() End Sub Private Sub btnLastPage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnLastPage.Click If Not CheckFillButton() Then Return ' Check if you are already at the last page. If recNo = maxRec Then MessageBox.Show("You are at the Last Page!") Return End If currentPage = PageCount recNo = pageSize * (currentPage - 1) LoadPage() End Sub Private Sub DisplayPageInfo() txtDisplayPageNo.Text = "Page " & currentPage.ToString & "/ " & PageCount.ToString End Sub Private Sub btnFillGrid_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnFillGrid.Click 'Set the start and max records. pageSize = txtPageSize.Text maxRec = dtSource.Rows.Count PageCount = maxRec \ pageSize ' Adjust the page number if the last page contains a partial page. If (maxRec Mod pageSize) > 0 Then PageCount = PageCount + 1 End If 'Initial seeings currentPage = 1 recNo = 0 ' Display the content of the current page. LoadPage() End Sub Private Function CheckFillButton() As Boolean 'Check if the user clicks the "Fill Grid" button. If pageSize = 0 Then MessageBox.Show("Set the Page Size, and then click the ""Fill Grid"" button!") CheckFillButton = False Else CheckFillButton = True End If End Function
修改代码中的 ConnectionString 参数以使它指向罗斯文 (Northwind) 数据库的一个现有实例。
按 F5 键生成并运行此项目。
默认情况下,将"页大小"设置为 5 个记录,您可以在文本框中更改它。
单击填充网格。注意,网格中填入了 5 个记录。
单击第一页、下一页、上一页 和最后一页可以在不同的页面之间浏览。
相关文章推荐
- 如何使用 Visual VB .NET 对 DataGrid Windows 控件执行分页
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页?
- 摘:如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- HOW TO:使用 Visual C# _NET 对 DataGrid Windows 控件执行分页(转载)
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页(转载)
- 一个DataGrid分页控件,c#写的,再vb.net中调用,将会不断完善的
- VB.NET怎样开发自定义Windows控件
- 在ASP.Net With C# 中使用 DataGrid 控件分页展示数据
- vb.net 2005 用户控件怎样继承datagrid ?
- 向 DataGrid Windows 控件中添加分页的步骤
- vb.net axWindowsMediaPlayer 控件使用
- [参考]一个ASP.Net的DataGrid分页控件,在Oracle数据库下,每次只取当前页的数据,不使用存储过程
- vb.net中对Repeater控件进行分页显示
- [VB.NET]急,如何用js获得,设置datagrid 的template column里面放的控件值?
- asp.net 分页控件与执行分页的存储过程
- 一个ASP.Net的DataGrid分页控件