Vb.net 可以在DataGridView中分页吗?

Vb.net 可以在DataGridView中分页吗?,vb.net,datagridview,Vb.net,Datagridview,在VB.NET中是否可以在DataGridView中分页? 我已经成功地连接到数据库,并且能够将数据导入到DataGrid中,但问题是我拥有的表太大,有超过10 mil行。因此,在一个视图中显示all-in-one会减慢加载时间,或者如果我选择添加更多的数据列,那么应用程序将变成一个错误 例如,这一行可以工作 cmd.CommandText=“选择primaryTitle、startYear、runtimeMinutes、流派、FROM Basics” 但是这一行会给我抛出一个名为System.

在VB.NET中是否可以在DataGridView中分页? 我已经成功地连接到数据库,并且能够将数据导入到DataGrid中,但问题是我拥有的表太大,有超过10 mil行。因此,在一个视图中显示all-in-one会减慢加载时间,或者如果我选择添加更多的数据列,那么应用程序将变成一个错误

例如,这一行可以工作

cmd.CommandText=“选择primaryTitle、startYear、runtimeMinutes、流派、FROM Basics”

但是这一行会给我抛出一个名为System.OutOfMemoryException的错误

cmd.CommandText=“选择primaryTitle、startYear、runtimeMinutes、流派、导演、基础编剧、剧组”

任何帮助都将不胜感激

这是我当前的代码。我所做的唯一一件事就是将数据导入DataGridView,因为我不能再继续了

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim con As New SqlClient.SqlConnection
        con.ConnectionString = "Data Source=DESKTOP-7SOUE1N\SQLEXPRESS;Initial Catalog=IMDb MOVIE DATABASE SYSTEM;Integrated Security=True"
        con.Open()

        Dim cmd As New SqlClient.SqlCommand
        cmd.Connection = con
        cmd.CommandText = "SELECT primaryTitle, startYear, runtimeMinutes, genres, directors, writers FROM Basics, Crew"
        Dim rdr As SqlClient.SqlDataReader = cmd.ExecuteReader
        Dim dt As New DataTable
        dt.Load(rdr)
        rdr.Close()
        DataGridView1.DataSource = dt

        con.Close()
    End Sub
End Class

是的,当然是。我通常就是这样做的

先决条件:

  • DataGridView
    DataGridView 1
  • ToolStrip
    ToolStrip1
    • 文本框
      页码
    • 标签
      页面计数
    • 按钮
      btnPageBack
    • 按钮
      btnPageNext
    • 标签
      显示的总数
    • Label
      OutOfTotalRecords
    • (一些标签如“页码”、“起始”、“显示总数”、“超出”、“记录”)
  • Dim RowsPerPage as Int16=40'集
这是designer中
ToolStrip
bellow
DataGridView
footer的外观:

获取或更新列表SQL(包装在
LoadListOfRecords()
sub中):

您可以先跳过
订单
。但请注意,
偏移xx行
,它告诉它应该从数据库中的何处开始读取记录(从开始偏移多少记录)和
仅获取下一个xx行
,它告诉它要读取多少行并加载到“页面”。我跳过了创建
数据集
、读取
数据表
、将其分配给
DataGridView
数据源
等内容

按钮后退(我不会放在下一步,它几乎相同,只是改变了限制条件和迭代):

手动输入页码(转到特定页面),如下
Enter
键行程:

Private Sub PageNo_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles PageNo.KeyDown
    Call LoadListOfRecords()
End Sub

就这样。简单,易于用户使用,作品魅力十足,久经考验。没有第三方控件和库的混乱。

是否将其导入datatable以管理它作为一个选项,或者您需要在SQL级别执行此操作?将其导入datagridview不是一个选项,问题是启动时需要我在表和列视图中列出所有内容。您可能需要查看
SELECT primaryTitle,startYear,运行时分钟数,基本类型按primaryTitle ASC偏移量排序((IIf(Me.PageNo.Text=”“,1,CInt(Me.PageNo.Text))-1)*50)仅获取下50行“
这是错的吗?我的代码似乎无法工作是的,您的SQL代码中有一个小错误,请注意,括号中的代码旁边缺少
行。所以这就像偏移500行只取下50行一样。在诸如SSMS之类的工具中对SQL代码进行故障排除,然后在VB.NET代码中使用它,这很好。
Private Sub btnPageBack_Click(sender As System.Object, e As System.EventArgs) Handles btnPageBack.Click
    If CInt(Me.PageNo.Text) > 1 Then
        Me.PageNo.Text = CInt(Me.PageNo.Text) - 1
    End If
    Call LoadListOfRecords()
End Sub
Private Sub PageNo_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles PageNo.KeyDown
    Call LoadListOfRecords()
End Sub