Я пытаюсь разработать свое первое приложение с базой данных (WindowsFormsApp / C # / visual studio), но я полностью застрял в управлении изменениями, внесенными в представление данных, когда его источником данных является запрос.
У меня есть набор данных с двумя таблицами:
* BooksTable
IDBook |BookTitle |IDAuthor
1 |Буря |1
2 |Wuthering Heights |2
3 |Генрих IV |1
* AuthorsTable
IDAuthor |AuthorName
1 |Шекспир
2 |Эмили Бронте
Очевидно, что между двумя таблицами в полях «IDAuthor» помещается отношение один ко многим.
Теперь: мне нужен пользователь для управления списком книг.«Управление» означает, что пользователь должен иметь возможность визуализировать и изменять список книг и список авторов (в широком смысле «список»).
Итак, я представляю пользователю два вида сетки данных.один для книг, BooksDataGridView, а другой для авторов, AuthorsDataGridView.Конечно, я не могу отобразить данные в BooksTable непосредственно в BooksDataGridView, пользователь не интересуется ни одним из идентификаторов базы данных, а также ему нужно видеть имя автора рядом с названием книги.ОК, это не имеет большого значения, я могу сделать это, выполнив запрос, довольно простое внутреннее соединение, которое возвращает свой результат в новую таблицу: queryTable.
Итак: я выполняю свой запрос, затем я устанавливаюqueryTable как источник данных для моего BookDatagrid и т. д.!Пользователь может читать все книги в моей базе данных удобным способом.
Буря |Шекспир
Wuthering Heights |Эмили Бронте
Генрих IV |Шекспир
С этого момента проблемы.Теперь мой пользователь хочет внести изменения в данные, действующие на сетке данных.Проблема в том, что queryTable содержит КОПИЮ данных в моей базе данных;данные в queryTable и данные в других таблицах (Книги и Авторы) не синхронизируются никоим образом, поэтому, если я изменю какую-либо запись в любом месте, я получу противоречивую базу данных.Например, когда мой пользователь изменяет поле BookTitle в записи BooksDatagridview, это изменение будет влиять только на queryTable: но я бы хотел, чтобы это изменение коснулось и BookTable.
Как я могу это сделать?Есть ли какой-либо автоматизм, который позволяет мне это сделать?Или я должен делать все это «вручную»?Мне приходится управлять таблицей каждый раз, когда пользователь касается сетки данных для редактирования / вставки / удаления любой записи?
Или мой подход к ошибкам и есть ли более разумный способ сделать все это?
спасибо за ваше время A