vb.net DataGrid Windows 控件执行分页

前端之家收集整理的这篇文章主要介绍了vb.net DataGrid Windows 控件执行分页前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

http://support.microsoft.com/kb/305271/zh-cn



DataGridWeb 控件有内置的自动自定义分页功能,但是DataGridWindows 控件却没有这些功能。本文介绍如何为DataGridWindows 控件生成简单的分页机制。

本文中的代码示例利用了数据集对象。在 ADO.NET 中,数据集对象是通过单次操作填充的,它们始终驻留在内存中。如果您在使用一个大型数据集,本文介绍如何以编程方式按块区或页面形式显示数据。

此技巧有一些局限性。有关更多信息,请参阅疑难解答一节。

要求

  • Microsoft Visual Basic .NET
  • Microsoft sql Server Northwind 示例数据库

向 DataGrid Windows 控件添加分页的步骤

当您对 DataGrid进行分页时,您会在页面大小的"块区"中显示数据,也即,一次显示一页记录。下面的代码示例将每页的 DataRow对象从内存中的 数据集复制到一个临时表中。该临时表然后会绑定到 DataGrid控件。
  1. 打开一个新的 Visual Basic .NET Windows 应用程序。默认情况下将创建 Form1。
  2. 添加DataGrid控件,将其ReadOnly属性设置为True
  3. 将以下附加控件添加到 Form1 上,然后按如下所示设置它们的属性
    Control Name Property Text Property
    Button btnFirstPage First Page
    btnNextPage Next Page
    TextBox txtDisplayPageNo
    btnPrevIoUsPage PrevIoUs Page
    btnLastPage Last Page
    txtPageSize 5
    btnFillGrid Fill Grid

  4. 复制下面的代码并粘贴到 Form1 的 General Declaration 部分:
    Imports System
    Imports System.Data
    Imports System.Data.sqlClient
  5. 复制下面的代码并粘贴到"Windows Form Designer generated code"区域@H_301_151@之前以声明 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"区域@H_301_151@之后:
    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 个记录。
  • 单击第一页下一页上一页最后一页可以在不同的页面之间浏览。
  • 猜你在找的VB相关文章