Вы делаете это совершенно неправильно. Что вы должны сделать:
- Используйте адаптер данных, чтобы заполнить
DataTable
, вызвав Fill
. - Привязать
DataTable
к BindingSource
. - Свяжите
BindingSource
с DataGridView
, а также с TextBoxes
. - Добавляйте и удаляйте строки через
BindingSource
и редактируйте строки напрямую. - Сохранить все изменения обратно в базу данных за один go путем вызова
Update
на адаптере данных и передачи DataTable
.
. Вы добавите BindingSource
к форме в конструкторе , Тогда привязка данных будет выглядеть примерно так:
myBindingSource.DataSource = myDataTable
myDataGridView.DataSource = myBindingSource
myTextBox.DataBindings.Add("Text", myBindingSource, "Column1")
При выборе строки в сетке Textboxes
заполнится значениями поля для этой строки. Затем вы можете отредактировать в отдельных элементах управления и зафиксировать изменение неявным образом, перейдя к другой строке или явно, вызвав EndEdit
на BindingSource
. Чтобы удалить выбранную строку, наберите RemoveCurrent
на BindingSource
. Чтобы добавить новую строку, позвоните AddNew
на BindingSource
. Я не проверял, но я считаю, что эта новая строка сразу доступна через TextBoxes
. Опять же, внесите изменения неявно или явно. В случае, если это не очевидно, BindingSource
предназначен для работы со связанными данными.
Если это еще не ясно, все эти изменения вносятся локально, только в DataTable
. База данных обновляется при вызове Update
на адаптере данных. Вам нужно будет либо использовать построитель команд, либо создать InsertCommand
, UpdateCommand
и DeleteCommand
самостоятельно.