刷新 DataGridView vb.net
Refresh DataGridView vb.net
我有不刷新的 DataGridView。我希望能够通过单击 'Refresh' 按钮来刷新它。
我的数据库名为 'ProjectDatabase',我想使用的 table 名为 'SWOT'。
我已经尝试了几种方法,但 none 一直有效,如果它确实有效,那么我会遇到新问题,比如每次我点击刷新都会复制数据。我正在使用 MS Access 数据库。
我尝试了下面的编码,它刷新了,但是每次我点击刷新都会复制数据 x2:
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
Refreshdata()
End Sub
Dim myConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb")
Dim DS As DataSet = New DataSet
Dim DA As OleDbDataAdapter
Dim tables As DataTableCollection = DS.Tables
Dim source1 As New BindingSource()
Private Sub Refreshdata()
DA = New OleDbDataAdapter("Select * from SWOT", myConnection)
DA.Fill(DS, "SWOT_Report")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
DataGridView1.Refresh()
End Sub
我认为您使用 BindingSource
、DataSet
、DataAdapter
和 DataTable
成员(class 范围使您的代码过于复杂) 变量。
对于成员变量,将它们剥离为这两个:
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb"
Dim swotBindingSource As BindingSource
请注意,myConnection
对象已被删除并替换为 连接字符串变量
在表单 New()
方法中添加:
swotBindingSource = New BindingSource()
DataGridView1.DataSource = swotBindingSource
这会将您的 DataGridView
设置为将 swotBindingSource
作为其数据源。稍后在过滤数据时可以使用 BindingSource。
并且,最后将 RefreshData
sub 更改为:
Private Sub Refreshdata()
Dim swotDataTable As New DataTable
Using conn As New OleDbConnection(ConnectionString)
Using DA As New OleDbDataAdapter("SELECT * FROM SWOT", conn)
Dim ds As New DataSet
DA.Fill(ds, "SWOT_Report")
swotBindingSource.DataSource = ds.Tables(0)
End Using
End Using
End Sub
当 swotBindingSource
更新时,您应该会自动在 DataGridView 中看到更新。
由于缺少 myConnection
对象,您可能还必须对其余代码进行其他更改,您最好创建一个新的 Connection 对象(类似于它的方式在 RefreshData
子中完成)每次您需要使用数据库而不是在应用程序启动时创建数据库并重新使用相同的连接。
您需要做的是在再次填充之前清除您的 DataTable
。 .NET 不会自动执行此操作。
Private Sub Refreshdata()
'-- clear table before filling
If DS.Tables("SWOT_Report") IsNot Nothing Then DS.Tables("SWOT_Report").Rows.Clear
DA = New OleDbDataAdapter("Select * from SWOT", myConnection)
DA.Fill(DS, "SWOT_Report")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
DataGridView1.Refresh()
End Sub
我有不刷新的 DataGridView。我希望能够通过单击 'Refresh' 按钮来刷新它。
我的数据库名为 'ProjectDatabase',我想使用的 table 名为 'SWOT'。
我已经尝试了几种方法,但 none 一直有效,如果它确实有效,那么我会遇到新问题,比如每次我点击刷新都会复制数据。我正在使用 MS Access 数据库。
我尝试了下面的编码,它刷新了,但是每次我点击刷新都会复制数据 x2:
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
Refreshdata()
End Sub
Dim myConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb")
Dim DS As DataSet = New DataSet
Dim DA As OleDbDataAdapter
Dim tables As DataTableCollection = DS.Tables
Dim source1 As New BindingSource()
Private Sub Refreshdata()
DA = New OleDbDataAdapter("Select * from SWOT", myConnection)
DA.Fill(DS, "SWOT_Report")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
DataGridView1.Refresh()
End Sub
我认为您使用 BindingSource
、DataSet
、DataAdapter
和 DataTable
成员(class 范围使您的代码过于复杂) 变量。
对于成员变量,将它们剥离为这两个:
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb"
Dim swotBindingSource As BindingSource
请注意,myConnection
对象已被删除并替换为 连接字符串变量
在表单 New()
方法中添加:
swotBindingSource = New BindingSource()
DataGridView1.DataSource = swotBindingSource
这会将您的 DataGridView
设置为将 swotBindingSource
作为其数据源。稍后在过滤数据时可以使用 BindingSource。
并且,最后将 RefreshData
sub 更改为:
Private Sub Refreshdata()
Dim swotDataTable As New DataTable
Using conn As New OleDbConnection(ConnectionString)
Using DA As New OleDbDataAdapter("SELECT * FROM SWOT", conn)
Dim ds As New DataSet
DA.Fill(ds, "SWOT_Report")
swotBindingSource.DataSource = ds.Tables(0)
End Using
End Using
End Sub
当 swotBindingSource
更新时,您应该会自动在 DataGridView 中看到更新。
由于缺少 myConnection
对象,您可能还必须对其余代码进行其他更改,您最好创建一个新的 Connection 对象(类似于它的方式在 RefreshData
子中完成)每次您需要使用数据库而不是在应用程序启动时创建数据库并重新使用相同的连接。
您需要做的是在再次填充之前清除您的 DataTable
。 .NET 不会自动执行此操作。
Private Sub Refreshdata()
'-- clear table before filling
If DS.Tables("SWOT_Report") IsNot Nothing Then DS.Tables("SWOT_Report").Rows.Clear
DA = New OleDbDataAdapter("Select * from SWOT", myConnection)
DA.Fill(DS, "SWOT_Report")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
DataGridView1.Refresh()
End Sub