首页 > 解决方案 > 刷新 DataGridView vb.net

问题描述

我有不刷新的 DataGridView。我希望能够通过单击“刷新”按钮来刷新它。

我的数据库称为“ProjectDatabase”,我要使用的表称为“SWOT”。

我尝试了几种方法,但都没有奏效,如果它确实有效,那么我会遇到新问题,例如每次单击刷新时都会重复数据。我使用的是 MS Acess 数据库。

我尝试了以下编码,它会刷新,但每次单击刷新时都会重复数据 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

在此处输入图像描述

在此处输入图像描述

标签: vb.netvisual-studioms-accessdatagridview

解决方案


我认为您使用BindingSourceDataSetDataAdapterDataTable成员(类范围)变量使代码过于复杂。

对于成员变量,将它们剥离为以下两个:

Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb"
Dim swotBindingSource As BindingSource

请注意,该对象已被删除并myConnection替换为连接字符串变量

在 FormsNew()方法中添加:

swotBindingSource = New BindingSource()
DataGridView1.DataSource = swotBindingSource

这将设置您DataGridView将其swotBindingSource作为其数据源。稍后在过滤数据时可以使用 BindingSource。

并且,最后将RefreshDatasub 更改为:

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

更新后,您应该会自动在swotBindingSourceDataGridView 中看到更新。


由于缺少对象,您可能还必须对其余代码进行其他更改,每次需要myConnection时创建一个新的 Connection 对象(类似于在子中的完成方式)会更好RefreshData使用数据库而不是在应用程序启动时创建数据库并重新使用相同的连接。


推荐阅读