Загрузить доступ из Datatable в Datset в DataGridView и обновить изменения в DataGridView в Datatable

Мне нужно загрузить DataTable из Microsoft Access в DataSet с помощью OleDb. Мне нужно загрузить этот DataSet в DataGridView. Затем мне нужно внести изменения в DataGridView и обновить эти изменения в исходном DataTable в Microsoft Access.

Вот мой код:

Public tblName As String = "Criteria"

Dim ds As New DataSet()
Dim da As OleDbDataAdapter
Dim cmdBuilder As OleDbCommandBuilder
Dim Bsource As New BindingSource

Public Sub Show_Panel_Manage_Calculations()
    Panel_Manage_Calculations.Show()

    Nordeen_Investing_3.con.Open()
    da = New OleDbDataAdapter("SELECT Calculation, [Interval], Formula FROM " & tblName & "", Nordeen_Investing_3.con)
    cmdBuilder = New OleDbCommandBuilder(da)
    da.Fill(ds, "Criteria")

    Bsource.DataSource = ds
    DataGridView_Manage_Calculations.DataSource = Bsource
    Nordeen_Investing_3.con.Close()

End Sub

Private Sub Button_Update_Click(sender As Object, e As EventArgs) Handles Button_Update.Click
    Nordeen_Investing_3.con.Open()
    da.Update(ds, "Criteria")
    Nordeen_Investing_3.con.Close()
End Sub

Сейчас мои данные из DataTable не отображаются в моем DataGridView.


person gromit1    schedule 14.10.2013    source источник
comment
Когда вы создаете OleDbcCommandBuilder, вы заключаете квадратные скобки вокруг Interval, предполагая, что вы знаете, что это зарезервированное слово в Access SQL. В этом случае вас может заинтересовать мой недавний ответ здесь.   -  person Gord Thompson    schedule 15.10.2013


Ответы (1)


DataSource ожидает Table, а не всего DataSet. Также вам не нужна часть BindingSource. Образец кода:

DataGridView_Manage_Calculations.DataSource = ds.Tables(0) 'By assuming that you want the first table
person varocarbas    schedule 14.10.2013
comment
Это сработало идеально. Но теперь я получаю эту ошибку, когда пытаюсь обновить: Additional information: Syntax error in INSERT INTO statement. - person gromit1; 15.10.2013
comment
@ gromit1 извините, но это не имеет отношения к части DataGridView (даже не к части VB.NET), а к вашему оператору SQL. Если это работало раньше, то должно работать и сейчас; просмотрите код и убедитесь, что вы ничего не изменили. - person varocarbas; 15.10.2013
comment
@ gromit1 Кроме того, в опубликованном вами коде нет INSERT INTO ?! Эта ошибка относится к другой части вашего приложения! - person varocarbas; 15.10.2013
comment
Раньше это не работало. Первым шагом в моей проблеме было заставить мой DataTable отображаться в DataGridView. Теперь это решено благодаря вам. Второй шаг к моей проблеме - это возможность внести изменения в DataGridView и обновить исходный DataTable. - person gromit1; 15.10.2013
comment
Насколько я понимаю, OleDbDataAdapter должен создавать оператор INSERT INTO. Но это не так, и в этом заключается моя проблема. - person gromit1; 15.10.2013
comment
@громит1 хорошо. Но это не имеет ничего общего с INSERT INTO, и код, который вы разместили, не может вызвать эту ошибку... - person varocarbas; 15.10.2013
comment
@ gromit1 У меня нет доступа для имитации ваших условий, но часть da.update должна работать нормально. В качестве альтернативы вы можете сделать новый вызов New OleDbDataAdapter( и написать соответствующие операторы SQL (INSERT INTO или UPDATE). Что касается обновления DataGridView, вы можете обновить значения ячеек напрямую или путем изменения значений в источнике данных (ds.Tables( 0)) - person varocarbas; 15.10.2013
comment
@ gromit1, но я думаю, что вам следует провести несколько тестов и исследований по каждой проблеме, создать свой код и прийти сюда с конкретными проблемами. Вы написали все, но DataGridView не обновился из-за назначения неправильного DataSource, поэтому я ответил: конкретные проблемы, требующие конкретного ответа (+ общие подсказки, которые помогут вам решить другие проблемы), вам не кажется? - person varocarbas; 15.10.2013