2014-01-22 38 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 ,這只是我的工作,將其擴展到幾個。 –

相關問題