2011-02-09 6 views
1

Я использовал конструктор DataSet для создания FTWDataSet, который содержит таблицу AlarmText из базы данных SQLExpress. Пока что моя форма содержит ТОЛЬКО Datagridview1. В приведенном ниже коде успешно отображается содержимое таблицы AlarmText плюс добавленный столбец флажка (который я буду заполнять данными только для отображения, и здесь не проблема).Как обновить таблицу SQL из модифицированного datatable?

Dim ta As New FTWDataSetTableAdapters.AlarmTextTableAdapter 
    Dim dt As New FTWDataSet.AlarmTextDataTable 
    ta.Fill(dt) 
    DataGridView1.DataSource = dt 

    'create a new Bool column in the datatable 
    dt.Columns.Add("NewCol", (New Boolean).GetType) 

Что еще мне нужно сделать, чтобы использовать DataGridView для редактирования и сохранения значений в таблице AlarmText?

ответ

0

Вот краткое MSDN walkthrough по этой теме.

Некоторые примечания:

  • Вы не должны обязывающее источник сохранения изменений в базу данных.
  • Чтобы сделать адаптер таблицы доступным для других процедур в вашей форме, сделайте его переменной с формой (a.k.a. member) вместо области с областью метода, как в вашем примере.
  • Если вы создали свой Dataset с помощью Dataset Designer и вы извлекаете исходные данные из чего-либо большего, чем простая таблица или представление, то ваш адаптер не будет знать, как обновлять что-либо в исходной базе данных. В этой ситуации вам необходимо вручную настроить команду UPDATE. Для справки см. Раздел «Команды обновления адаптера таблицы» в приведенной выше ссылке.

Следует также упомянуть, что я избегаю TableAdapters в ADO.Net, как чума. В теории они очень удобны и мощны. На практике многие из них (особенно для поставщика Oracle) ошибочны, и если они не работают точно, вы полностью ввернуты.

Если вы используете только одну базовую таблицу, адаптер должен работать нормально (поэтому пока игнорируйте мои нигилистические рекомендации). Возможно, добавление дополнительного столбца в код приведет к разрыву адаптера (поскольку в таблице базы данных нет соответствующего столбца).

+0

Да, я думал, что будет задействован адаптер стола и источник привязки. Но у меня нет источника привязки, и адаптер таблицы, который был указан в показанном мной коде (Load event), недоступен из любой другой процедуры. – John

+0

Я переместил тусклый та, как Новый. , , для выражения только для выражения Public Class для формы. Я также добавил компонент DataSet, называемый DataSet1, со ссылкой на набор данных, который я создал в Designer, в форме. Затем я добавил ta.Update (Me.DataSet1.AlarmText) в событие Validated DataGridView. Все работает, но ничего не спасает. Событие, прошедшее проверку, безусловно, срабатывает. Спасибо за вашу помощь. , , – John

+0

Также перемещен ta.Update (Me.DataSet1.AlarmText) в событие CellValueChanged сетки. Все еще не сохраняется. – John

Смежные вопросы