Управление изменениями в сетке данных, когда источником данных является запрос - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь разработать свое первое приложение с базой данных (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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...