Каков правильный порядок обработки вставки из элемента управления с привязкой к данным с использованием BindingSource, DataSet и TableAdapter? Это вызывает у меня вечную путаницу.
У меня есть форма, которая используется для добавления новой строки.
Перед показом формы я вызываю:
bindingSource.AddNew();
bindingSource.MoveLast();
При сохранении я вызываю:
bindingSource.EndEdit();
tableAdapter.Insert([the row given to me as bindingSource.Current]);
Проблема в том, что
- если я не вызываю
EndEdit()
, изменения TextBox с текущим фокусом не сохраняются - если я вызываю
EndEdit()
, текущий элемент BindingSource больше не указывает на строку, которую я только что добавил.
Я, конечно, могу вызвать Insert()
со значениями из формы, в отличие от DataTable, который был обновлен BindingSource, но это противоречит цели использования привязки данных. Что мне нужно сделать, чтобы заставить это работать?
Я понимаю, что могу вызвать TableAdapter.Update()
для всего набора данных, поскольку я использую строго типизированный набор данных. Однако у меня есть внешние ключи в таблице, которые не привязаны к базе данных, и я добавляю их перед вызовом Insert().