我有一个多数据视图(DGV)的解决方案,现在有多个绑定源(BSs)和OleDbDataAdapters (官方发展援助)。
这是因为我在选项卡控件中有多个DGV,我希望在每个DGV中从数据库中显示不同的表,以及能够从DGV返回CRUD。
使用一个BS和官方发展援助,当我输入每个选项卡时,通过切换BS.DataMember,我能够在正确的DGV中显示所有正确的表。这是因为我每个标签上只有一个DGV。
我遇到问题的地方是回到数据库里。我发现,我发现的大多数例子都涉及到对每个表使用BS和官方发展援助。这似乎不雅致,所以如果有一种方法将DGV的DataSource绑定到特定的BS.Datamember,我很想知道它。
在默认了多个BS和官方发展援助之后,我可以从一个Sub中提取DGV、表名和BS,以更新任何DGV上的任何脏行。我还没搞明白的是,是否有一种方法可以得到最初用来填充表格的官方发展援助。在守则中:
Private Sub UniversalDGV_Handler_LeaveRow(sender As Object, e As DataGridViewCellEventArgs) _
Handles DGV1.RowLeave, DGV2.RowLeave, '...' DGVn.RowLeave
Dim DGV As DataGridView = CType(sender, DataGridView)
Dim bsPass As BindingSource = DGV.DataSource
Dim CurrentDBTableName As String = bsPass.DataMember
Dim da as OleDbDataAdapter = 'something I haven't figured out yet
UniversalDGV_RowLeave(sender, CurrentDBTableName, e, bsPass, da)
End Sub在现实中,我拥有的DGV的最大数量是7,所以我刚刚列出了一个匹配的列表,并以这种方式提取了官方发展援助。但这又一次显得很粗俗。
是否有一种方法可以从它所填充的表、在其上使用的DataAdapter DataSet 、BS或DGV中检索使用的
从BS或DGV的信息似乎有点牵强,因为他们没有直接互动的官方发展援助,从我的理解。我还考虑可能在使用适配器时将信息存储在dataset中,这至少是一个更优雅的列表/表。
发布于 2014-01-22 02:52:55
通过仔细阅读DataTable类的性质,我找到了答案。
通过使用DataTable.ExtendedProperties(),您可以存储填充表时使用的DataAdapter。代码示例:
Dim ds as DataSet
Dim BS1 as New BindingSource
Dim da1, da2, da3 as New OleDbDataAdapter
Private Sub DoSomething(da as OleDbDataAdapter)
ds.Tables.Add(New DataTable(DBTableName))
ds.Tables(DBTableName).ExtendedProperties("DataAdapter", da)
End Sub
Private Sub DoesSomethingElse() handles DGV1.Rowleave, DGV2.RowLeave, '...' DGVn.RowLeave
Dim DGV As DataGridView = CType(sender, DataGridView)
Dim bsPass As BindingSource = DGV.DataSource
Dim CurrentDBTableName As String = bsPass.DataMember
Dim RecalledDA as OleDbDataAdapter = ds.Tables(CurrentDBTableName).ExtendedProperties("DataAdapter")
'Do something with it. In my case I have a seperate sub I run it all into'
UniversalDGV_RowLeave(sender, CurrentDBTableName, e, da)
End Sub由于我没有受过正规的训练,也许其他人都知道这一点,但我希望我能节省一些时间来解决这个问题。
有了这个,您可以使用一个BS作为您所有的DGV,假设您一次只显示一个。我认为,如果您显示了需要BS的多个DGV,那么每个DGV仍然需要一个BS。
https://stackoverflow.com/questions/21272950
复制相似问题