У меня есть форма окна с рядом связанных с данными полей, относящихся к клиенту.Кроме того, у меня есть DataGridView, показывающий заказы для отображаемого в данный момент клиента.Это достигается с помощью элементов управления Visual Studio времени разработки (например, проекта DataSet, BindingSources TableAdapters и TableAdapterManager.
При загрузке формы для редактирования существующего клиента она заполняется с помощью (пользовательского) метода FillByID вClientsTableAdapter для фильтрации DataSet для одного релевантного клиента, который загружает их данные в поля клиента и корректно заполняет заказы DataGridView.
Все изменения, которые я вносил в заказы клиента (в DataGridView), сохраняются вОднако при сохранении базы данных ни одно из полей сведений о клиенте отсутствует. Они доступны для редактирования и показывают правильные данные при загрузке, но внесенные изменения не сохраняются при закрытии формы. Я пробовал два отдельных способа их сохранения.теперь первый из них соответствует порядку сохранения:
this.Validate();
this.clientordersBindingSource.EndEdit();
this.clientsBindingSource.EndEdit();
this.clientordersTableAdapter.Update(projectDataSet.clientorders);
this.clientsTableAdapter.Update(projectDataSet.clients);
... а второй - с использованием примера с несколькими таблицами в MSDN. К сожалению, ни один из этих методов не работает в отношениидетали клиента - хотя сизменения в клиентских заказах * сохраняются в обоих случаях.
Моя таблица клиентов имеет следующую структуру:
refnumber, title, forename, surname, gender, dob, contactnumber
clientTableAdapter имеет следующие строки CommandText для команды DeleteCommand:InsertCommand, SelectCommand и UpdateCommand соответственно:
DELETE FROM clients WHERE (refnumber = @Original_refnumber)
INSERT INTO clients (refnumber, title, forename, surname, gender, dob, contactnumber) VALUES (@refnumber, @title, @forename, @surname, @gender, @dob, @contactnumber)
SELECT refnumber, title, forename, surname, gender, dob, contactnumber FROM clients
UPDATE clients SET refnumber = @refnumber, title = @title, forename = @forename, surname = @surname, gender = @gender, dob = @dob, contactnumber = @contactnumber WHERE (refnumber = @Original_refnumber)
При сохранении, если я добавлю переменную для захвата результата этой строки:
var res = this.clientsTableAdapter.Update(projectDataSet.clients);
projectDataSet.clients.Count == 1
projectDataSet.clients.Rows[0].ItemArray
показывает измененные поля. projectDataSet.clients.Rows[0].RowState == Unchanged
res == 0
Может кто-нибудь предложить какие-либо подсказки?Это сводило меня с ума в течение нескольких дней!
ОБНОВЛЕНИЕ
Я заново создал форму с помощью дизайнера Visual Studio, затем скопировал и вставил весь кодиз оригинальной формы.Теперь это работает.Я предполагаю, что что-то не так в файле Designer.cs с одним из полей datasources / databinding.
Спасибо за полезные советы по отладке, ewall и Ladislav Mrnka.