2016-05-25 9 views
0

仕事Iは、3 datagridviewsデータアダプターは、習慣

datagridview1、datagridview2、datagridview3

それぞれのDataGridViewは、異なるデータ・アダプタと異なるバインディングをバインド使用されている

datapter1を有しますデータアダプタ2、データアダプタ3、バインディング1バインディング2、バインディング3

'binding dgv1 
datapter1.SelectCommand = mycmd 
datapter1.Fill(Dset, "something") 
binding1.DataSource = Dset.Tables("something1") 
datagridview1.DataSource = binding1 

'binding dgv2 
datapter2.SelectCommand = mycmd 
datapter2.Fill(Dset, "something") 
binding2.DataSource = Dset.Tables("something2") 
datagridview2.DataSource = binding2 

'binding dgv3 
datapter3.SelectCommand = mycmd 
datapter3.Fill(Dset, "something") 
binding3.DataSource = Dset.Tables("something3") 
datagridview3.DataSource = binding3 

とき、私はそれがエラーで私を促し、私のdatagridview1

Dim firstbuilder As New MySqlCommandBuilder(Me.dataadapter1) 
Me.dataadapter1.Update(Me.binding1.DataSource) 
Me.binding1.ResetBindings(False) 

を更新したい時、その欠落

'datagridview3の' DataTableのDataColumnの 'datagridview3にあります' 'datagridview3にあるソース列'の場合

なぜ私はこのエラーが発生しているのかわかりませんそれぞれのデータグリッドビューに対して異なるバインディングと異なるデータアダプタを作成しました。 問題を解決するためにいくつかの助けが必要です...

+0

'Fill'呼び出し、またはあなたがそれを修正理由だけということであるのそれぞれと同じ' DataSet'インスタンスとテーブル名を使用していますサンプルコード? – Mark

+0

私は同じデータセットを使用しています...それは私がしてはいけないことですか? – Solem

+0

はい、これはショーケースのためだけに変更されたソースコードです – Solem

答えて

1

私は数年前に同じ問題で苦労しました...私は最後にカスタムクラスを作成しました。基本的には、DataTableごとに個別のDataAdaptersと-Commandbuillderを作成しました。これが最も効率的な方法ですが、それが動作するかどうかわからない:

'1 Dataset for the full DB 
Public dbDataSet As New DataSet With {.CaseSensitive = False} 

'1 Datatable, Dataadapter en Commandbuilder per TABLE 
Private Listof_Datatables As New List(Of DataTable) 
Private Listof_Dataadapters As New List(Of OleDbDataAdapter) 
Private Listof_Command As New List(Of OleDbCommand) 
Private Listof_Commandbuilder As New List(Of OleDbCommandBuilder) 

Public Sub Load_Table(tablename As String) 
    'Load the AccessTable to the DataSet 
    Dim SQLstring As String = "SELECT * FROM " & tablename.ToUpper 
    Dim dbCon As New OleDbConnection(_DBconnString_full) 
    dbCon.Open() 
    Listof_Dataadapters.Add(New OleDbDataAdapter) 
    Listof_Command.Add(New OleDbCommand(SQLstring, dbCon)) 
    Listof_Dataadapters(Listof_Dataadapters.Count - 1).SelectCommand = Listof_Command(Listof_Command.Count - 1) 
    Listof_Commandbuilder.Add(New OleDbCommandBuilder(Listof_Dataadapters(Listof_Dataadapters.Count - 1))) 
    Listof_Commandbuilder(Listof_Commandbuilder.Count - 1).QuotePrefix = "[" 
    Listof_Commandbuilder(Listof_Commandbuilder.Count - 1).QuoteSuffix = "]" 
    Listof_Dataadapters(Listof_Dataadapters.Count - 1).Fill(dbDataSet, tablename) 
    Listof_Datatables.Add(dbDataSet.Tables(tablename)) 

    'Get primary keys 
    Dim UCollist As New List(Of String) 
    Dim mySchema As DataTable = CType(dbCon, OleDbConnection).GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, New Object() {Nothing, Nothing, tablename}) 
    Dim columnOrdinalForName As Integer = mySchema.Columns("COLUMN_NAME").Ordinal 
    For Each r As DataRow In mySchema.Rows 
     UCollist.Add(r.ItemArray(columnOrdinalForName).ToString) 
    Next 

    'Set primary keys 
    Dim keycolumn(UCollist.Count) As DataColumn 
    For index = 0 To UCollist.Count - 1 
     keycolumn(index) = dbDataSet.Tables(tablename).Columns(UCollist(index)) 
    Next 
    dbDataSet.Tables(tablename).PrimaryKey = keycolumn 

    dbCon.Close() 
End Sub 
Public Sub Update_Tables() 
    Dim NrAdap As Integer = Listof_Dataadapters.Count 
    For Adapterindex = 0 To NrAdap - 1 
     Listof_Dataadapters(Adapterindex).Update(dbDataSet.Tables(Adapterindex)) 
    Next 
End Sub 
+0

あなたの答えは難しいです。コードを上から下に読むことは非常に分かりやすいでしょう。この1つをありがとう! – Solem

関連する問題