我是 C# 的新手。我正在编写一个小型 GUI 数据库应用程序,它使用数据网格来显示表数据。当我在网格中编辑一行时,按下更新按钮,就会调用 tableadapter 的更新函数,并将更改传播回 DB。然后我为行更改事件实现了一个处理程序,该处理程序依次调用 tableadapter 的更新函数。但是这一次,当某个值发生更改并按下回车键时,将调用处理程序并引发 InvalidOperationException 并显示消息“已经有一个打开的 DataReader 与此命令相关联,必须先关闭它。” 但无论如何数据库都已更改。如何停止引发异常。我在连接字符串中有多个活动结果集设置为 true。
构造函数
public WSim(MainWindow h)
{
InitializeComponent();
//database connection with strongly typed dataset
usersAdapter = new testDBDataSetTableAdapters.usersTableAdapter();
users = usersAdapter.GetUsers();
users.usersRowChanged +=new testDBDataSet.usersRowChangeEventHandler(users_usersRowChanged);
this.DataContext = users.DefaultView;
}
行更改事件处理程序
private void users_usersRowChanged(object sender, testDBDataSet.usersRowChangeEvent e)
{
output.Content = "Row Modified";
usersAdapter.Update(users);
}
数据网格 xaml
<DataGrid Height="200" HorizontalAlignment="Left" Margin="26,249,0,0" Name="userGrid" VerticalAlignment="Top" Width="381" AutoGenerateColumns="True"
SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding}"
CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True"
CanUserAddRows="True" CanUserDeleteRows="True"/>