2014-01-22 33 views
0

我有多个datagridviews(DGV),现在有多个bindingsources(BSs)和OleDbDataAdapters(ODA)的解决方案。回想一下DataTable或DataSet的DataAdapter

这是因为我在选项卡控件中有多个DGV,并且我想在每个DGV中显示来自数据库的不同表格,并且能够从DGV返回CRUD。

使用一台BS和ODA,当我输入每个标签时,我能够通过切换BS.DataMember来显示正确的DGV中的所有正确表格。这工作,因为我只有一个DGV每个选项卡。

我遇到问题的地方是回到数据库。我发现我发现的大多数例子都是为每个表使用BS和ODA。这看起来很不雅观,所以如果有办法将DGV的DataSource绑定到特定的BS.Datamember,我很想知道它。

已经默认了多个BS和ODA,我可以从一个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,所以我只是做了匹配的列表,拉着ODA出来呀。但是,这似乎又非常粗糙。

有没有办法检索它填充的表格中使用了哪一个DataAdapter,在[BS或DGV]上使用了DataSet

来自BS或DGV的信息似乎有点牵强,因为根据我的理解,他们没有与ODA直接互动。我也在考虑可能将信息存储在数据集中,因为我使用了适配器,这至少会是一个更优雅的列表/表格。

回答

0

我通过仔细检查properties of the DataTable Class找到了答案。

通过使用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 

因为我没有受过正规训练,也许每个人都知道,但我希望我能救一个人所有的时间来找出答案。

使用此功能,您可以为所有DGV使用一个BS,假设您一次只显示一个。如果您显示多个需要BS的DGV,我认为您每个DGV仍需要一个BS。

+0

@GordThompson对不起,昨晚没有让你知道,但我想通常在这里如何解决它。 [你的例子](https://stackoverflow.com/questions/19369617/ds-tables-rows-add-makes-3-rows-when-called-once?answertab=active#tab-top)在一个DGV ,这只是我的工作,将其扩展到几个。 –

相关问题