2016-05-25 6 views
0

У меня 3 DataGridViewsDataAdapter для каждого DataGridView не будет работать

dataGridView1, datagridview2, datagridview3

каждый DataGridView в настоящее время связываются с использованием различных адаптеров данных и различных привязок

datapter1, dataadapter2, dataadapter3, binding1 binding2 и binding3

'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) 

это побуждает меня с ошибкой,

с отсутствующим DataColumn 'расположенный в datagridview3' в DataTable 'из datagridview3' для исходного столбца ', расположенного в datagridview3'

Я не понимаю, почему у меня эта ошибка, так как я различные привязки и разные данные для каждого datagridview. Нужна помощь, чтобы исправить проблему ...

+0

использует то же 'DataSet' экземпляр и имя таблицы с каждым из' Fill' вызовы, или это просто потому, что вы изменили его для образец кода? – Mark

+0

Я использую тот же набор данных ... это то, что я не должен делать? – Solem

+0

и да, это модифицированный исходный код только для витрины – Solem

ответ

1

Я боролся с той же проблемой в течение нескольких лет назад ... В конце концов я создал пользовательский класс. В основном я создал отдельные DataAdapters и -Commandbuillder для каждого DataTable. Не уверен, что это самый эффективный способ, но он работает:

'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

сначала ваш ответ сложный. но читать код сверху вниз очень понятно. спасибо за это! – Solem