当基础DataGridView
中的DataTable
更新时,我无法更新DataSource
。
我有一个班级(想象它实际上是在做一些有价值的事情):
Public Class config
Public Property inputsTable As DataTable
Public Property outputsTable As DataTable
Public Sub New()
inputsTable = New DataTable
outputsTable = New DataTable
inputsTable.TableName = "inputs"
inputsTable.Columns.Add("name")
inputsTable.Columns.Add("value")
outputsTable.TableName = "outputs"
outputsTable.Columns.Add("name")
outputsTable.Columns.Add("value")
End Sub
Public Sub LoadValuesFromConfig(newConfig As config)
Me.inputsTable = newConfig.inputsTable
Me.outputsTable = newConfig.outputsTable
' do stuff
End Sub
End Class
...支持Form
:
Public Class Form1
Public Property thisConfig As config
Public Property savedConfig As config
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
thisConfig = New config
DataGridView1.DataSource = thisConfig.inputsTable
DataGridView2.DataSource = thisConfig.outputsTable
End Sub
' do stuff
End Class
虽然DataGridView1
和DataGridView2
分别与myConfig.inputTable
和myConfig.outputTable
绑定,但如果我通过{{1}更新myConfig.inputTable
或myConfig.outputTable
} {},myConfig.LoadValuesFromConfig
未更新。 (这是因为当我传入新表时,数据源丢失了引用吗?)
我能想到的两种方法:
我可以这样做而不是DataGridView
吗?
Me.inputsTable = newConfig.inputsTable
在配置中创建一个事件,在更新表时触发,并在Me.inputsTable.Rows.Clear()
For Each row As DataRow In newConfig.inputsTable.Rows
Me.inputsTable.ImportRow(row)
Next
处理该事件并将Form1
重置为DataSource
任何建议或更好的想法都会很棒!
答案 0 :(得分:1)
这是因为当我在?
中传递新表时数据源丢失了引用
是的,这就是原因。在LoadValuesFromConfig
中,您将销毁对现有表的引用。
你有很多选择。
首先,在DataGridView
和DataTables
BindingSource
会更加灵活
其次,不是将BindingSource
直接绑定到表,而是将其绑定到DataSet
,并将DataMember
属性设置为表的名称。
然后,您有几个选项可以替换DataTable
实例中的数据,最好使用通过DataSet的Tables
属性提供的实例。
ReadXml
从XML文件重新加载完整的表格。Load
方法并提供(自定义)IDataReader
Merge
方法将另一个DataTable
(使用相同的方案)合并到现有的DataTable
我建议你开始here根据DataSets
和BindingSources