我正在尝试使用数据库(WindowsFormsApp / C#/ visual studio)开发我的第一个应用程序,但是当数据源是查询时,我完全坚持管理对datagridview所做的更改。
我有一个包含两个表的数据集:
* BooksTable
IDBook |书名| IDAuthor
1 |暴风雨| 1
2 |呼啸山庄| 2
3 |亨利四世| 1
* AuthorsTable
IDAuthor | AuthorName
1 |莎士比亚
2 |艾米莉·布朗特(EmilyBrontë)
很明显,在“ IDAuthor”字段的两个表之间放置了一对多关系。
现在:我需要用户来管理书籍列表。 “管理”是指用户必须能够可视化和修改书籍列表以及作者列表(广义上为“列表”)。
因此,我向用户提供了两个datagridview,一个用于书籍,BooksDataGridView,一个用于Authors,AuthorsDataGridView。 显然,我无法直接在BooksDataGridView中显示BooksTable中的数据,用户对任何数据库ID都不感兴趣,并且他还需要在书名旁边看到作者的名字。好的,这没什么大不了的,我可以执行一个查询,这是一个非常简单的内部联接,并在一个新表queryTable上返回结果。
所以:我执行查询,然后将queryTable设置为BookDatagrid等的数据源!用户可以轻松地阅读我数据库中的所有书籍。
暴风雨|莎士比亚
呼啸山庄|艾米莉·布朗特(EmilyBrontë)
亨利四世|莎士比亚
从这里开始,出现问题。现在,我的用户想要对作用在数据网格上的数据进行更改。 问题是queryTable包含数据库中数据的COPY; queryTable中的数据和其他表(Books和Authors)中的数据没有以任何方式进行同步,因此,如果我在任何地方更改任何记录,都会导致数据库不一致。 例如,当我的用户修改BooksDatagridview记录中的BookTitle字段时,此更改将仅影响queryTable:但我希望此更改也涉及BookTable。
我该怎么做?是否有任何一种自欺欺人的态度允许我这样做?还是我必须“手工”完成所有这些工作?每当用户触摸数据网格以编辑/插入/删除任何记录时,我都必须管理该表?
还是我犯错的方法,有没有更聪明的方法来完成所有这些工作?
花点时间 A