vb.net重新绑定datagrid以显示vb.net中的更改

vb.net重新绑定datagrid以显示vb.net中的更改,.net,vb.net,data-binding,datagridview,datasource,.net,Vb.net,Data Binding,Datagridview,Datasource,我有以下代码,在对数据库进行更新后刷新表单中的datagrid。我的问题是,为什么我必须清除数据源,然后重新添加以显示更改。我认为刷新方法可以做到这一点,但我似乎无法实现这一点。有没有比重置数据源更有效的方法来刷新数据网格 Public Sub addPlan(ByVal planname, ByVal plannumber) Dim planinfo As New changeDatabase(planname, plannumber, planAdapter) planin

我有以下代码,在对数据库进行更新后刷新表单中的datagrid。我的问题是,为什么我必须清除数据源,然后重新添加以显示更改。我认为刷新方法可以做到这一点,但我似乎无法实现这一点。有没有比重置数据源更有效的方法来刷新数据网格

Public Sub addPlan(ByVal planname, ByVal plannumber)
    Dim planinfo As New changeDatabase(planname, plannumber, planAdapter)

    planinfo.addPlan()
    Form1.DataGridView1.EndEdit()

    Form1.DataGridView1.DataSource = ""
    Form1.DataGridView1.DataSource = planAdapter.GetData()
End Sub

尝试创建显式的
BindingSource
并为其分配数据源,然后将
DataGridView
的数据源属性设置为BindingSource实例

BindingSource
对象的
ResetBinding
方法将导致
DataGridView
重新读取列表中的所有项目并刷新所有显示的值

Dim bindingSource As BindingSource
bindingSource = New BindingSource()
bindingSource.DataSource = planAdapter.GetData()
Form1.DataGridView1.DataSource = bindingSource

bindingSource.ResetBindings(false)

注意:传递false意味着只有值在原始数据源中发生了更改,传递true意味着数据的架构发生了更改。

下面的代码显示了一种有效的设置方法:

Protected WithEvents myWordClueList As WordClueList
Protected gridBindingSource As BindingSource

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    myWordClueList = New WordClueList()

    myWordClueList.Add(New WordCluePair With {.Word = "Eden", .Clue = "First garden"})
    myWordClueList.Add(New WordCluePair With {.Word = "Fears", .Clue = "Aggregate of negative emotions"})

    ' Instantiate a binding source for the GridView
    gridBindingSource = New BindingSource With {.DataSource = myWordClueList}
    WordClueGrid.DataSource = gridBindingSource

End Sub
诀窍是使用绑定源对象

        myWordClueList.OrderBy(Function(pairRow As WordCluePair) pairRow)
        gridBindingSource.ResetBindings(False)
要在对数据源进行更改时更新GridView,请调用BindingSource对象的ResetBindings方法

        myWordClueList.OrderBy(Function(pairRow As WordCluePair) pairRow)
        gridBindingSource.ResetBindings(False)