使用类型化数据集插入,更新,删除

本文关键字:更新 删除 插入 数据集 类型化 | 更新日期: 2023-09-27 18:10:29

我有一个简单的应用程序,其中有一个列表框,其中包含数据库中作者的姓名(为了这个项目的目的,1 author = 1 book)。我必须在这个应用程序中使用类型化数据集。

当您选择其中一个作者时,旁边有三个文本框。一个显示所选作者的姓名,另一个显示与他相关的书籍,最后一个显示出版日期。

在这个表单上我有3个按钮。一个应该从数据库中删除选中的行(在列表框中),一个应该更新选中的行,一个应该插入一个新行。

我填充的列表框和文本框只是通过使用拖放从数据源到表单,所以我在我的代码中唯一的一行是:

this.BookTableAdapter.Fill(this.myDataSet.Book);

这当然发生在load。

我开始尝试实现删除功能,并将其放在删除按钮的onClick事件上:

MyDataSet.BookRow selectedBook = (MyDataSet.BookRow)listBox1.SelectedItem;
selectedBook.Delete();

当我按下删除按钮时,它给了我以下例外:

System.InvalidCastException: Unable to cast object of type 'System.Data.DataRowView' to type 'BookRow'.
谁能告诉我我在这里做错了什么?

使用类型化数据集插入,更新,删除

很明显:listBox1.SelectedItem中的对象是:System.Data.DataRowView类型,所以你根本不能做:

(MyDataSet.BookRow)listBox1.SelectedItem;

好消息是Delete或Remove方法与基类DataRowDataTable一起工作,因此您实际上不需要在BookRow类型级别上工作。

每个DataRowView包含一个名为Row的成员,该成员返回关联的DataRow,因此您可以使用该成员作为行并直接从那里或从父DataTable中删除它。

我没有编译代码,所以不能确切地说,但只是尝试以下并调整它,如果没有完全构建:

((System.Data.DataRowView)listBox1.SelectedItem).Row.Delete();

列表框包含一个DataRowView,其中包含绑定到它的数据。问题是这行MyDataSet。BookRow = (MyDataSet.BookRow)listBox1.SelectedItem;当你试图将DataRowView转换为BookRow对象时

尝试使用列表框的选定值成员,或者在列表框的DataRowView中对关联的DataRow调用delete。我不确定delete是否会更新表,或者只是标记一行删除,所以你可能需要在datatable/删除行上调用update当你完成时