【问题标题】:vb.net rebind datagrid to display changes in vb.netvb.net 重新绑定数据网格以显示 vb.net 中的更改
【发布时间】:2012-02-13 19:08:30
【问题描述】:
我有以下代码在对数据库进行更新后刷新表单中的数据网格。我的问题是为什么我必须清除数据源然后重新添加它才能显示更改。我认为刷新方法可以做到这一点,但我似乎无法让它发挥作用。有没有更有效的方法来刷新数据网格而不是重置数据源?
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
【问题讨论】:
标签:
.net
vb.net
data-binding
datagridview
datasource
【解决方案1】:
下面的代码显示了一种有效的设置方法:
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
诀窍是使用绑定源对象。
要在对 DataSource 进行更改时更新 GridView,请调用 BindingSource 对象的 ResetBindings 方法。
myWordClueList.OrderBy(Function(pairRow As WordCluePair) pairRow)
gridBindingSource.ResetBindings(False)
【解决方案2】:
尝试创建一个显式的BindingSource 并为其分配一个数据源,然后将DataGridView 的DataSource 属性设置为BindingSource 实例。
BindingSource 对象的ResetBinding 方法将导致DataGridView 重新读取列表中的所有项目并刷新所有显示的值。
Dim bindingSource As BindingSource
bindingSource = New BindingSource()
bindingSource.DataSource = planAdapter.GetData()
Form1.DataGridView1.DataSource = bindingSource
bindingSource.ResetBindings(false)
注意:传递 false 表示原始数据源中只有值发生了变化,true 表示数据的 schema 发生了变化。