在VB.NET中可以在DataGridView中进行分页吗? 我已经成功连接到数据库,并且能够将数据导入到DataGrid中,但是问题是我拥有的表很大,超过1000万行。因此,在一个视图中全部显示可能会减慢加载时间,或者如果我选择添加更多的数据列,则该应用程序将变成错误。
例如,该行将起作用
cmd.CommandText = "SELECT primaryTitle, startYear, runtimeMinutes, genres, FROM Basics"
但是此行会抛出一个错误,称为System.OutOfMemoryException
cmd.CommandText = "SELECT primaryTitle, startYear, runtimeMinutes, genres, directors, writers FROM Basics, Crew"
任何帮助将不胜感激。
这是我当前的代码。我唯一要做的就是将数据导入到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
答案 0 :(得分:1)
是的,当然是。这就是我通常的做法。
先决条件:
DataGridView
DataGridView1 ToolStrip
ToolStrip1
TextBox
页面编号Label
PageCount Button
btnPageBack Button
btnPageNext Label
TotalShown Label
OutOfTotalRecords 这是ToolStrip
下面的DataGridView
页脚在设计器中的外观:
获取或更新列表SQL(包装在LoadListOfRecords()
子中):
"SELECT
...
ORDER BY " & dgwSortCol & " " & dgwSortOrder & " " &
OFFSET " & ((IIf(Me.PageNo.Text = "", 1, CInt(Me.PageNo.Text)) - 1) * RowsPerPage) & "
ROWS FETCH NEXT " & RowsPerPage & " ROWS ONLY; "
您可能首先会跳过ORDER
。但是请注意OFFSET xx ROWS
,它告诉数据库应该从哪个位置开始读取记录(通过从起始位置偏移多少记录)和FETCH NEXT xx ROWS ONLY
,它告诉要读取并加载到“页面”的行数。 ”。我跳过了诸如创建DataSet
,阅读DataTable
,将其分配给DataGridView
的{{1}}之类的工作。
后退按钮(我不会放在下一步,它几乎相同,只是更改了限制条件和迭代):
DataSource
在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
击键之后手动输入页码(转到特定页面):
Enter
就是这样。简单,易于用户使用,魅力十足,久经考验。没有混乱的第三方控制和库。