WPF datagrid 更新数据库

Posted

技术标签:

【中文标题】WPF datagrid 更新数据库【英文标题】:WPF datagrid update database 【发布时间】:2012-12-24 05:42:16 【问题描述】:

我是 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"/>

【问题讨论】:

【参考方案1】:

正如例外所说,您应该先关闭阅读器。您没有提供足够的信息,我无法解释更多;但是看到这个link。我想它会对你有所帮助。

【讨论】:

但问题是我没有手动打开任何 SQLDataReader。我使用数据源工具添加了一个新数据源,它为我提供了一个数据集及其关联的数据适配器。我使用适配器的 Get() 方法来获取表中的结果,并使用 Update 方法来更新数据库。那么我应该如何控制数据读取器 @SaifulShubho 你能更新你的问题并给我们这个方法:usersAdapter.Update(users);. 我不确定从哪里可以获得代码,因为我正在使用由 Visual Studio 创建的数据源。但是从设计师那里我在更新方法中得到了这个查询 更新用户 SET userName = \@userName, password = \@password, Name = \@Name, Email = \@Email WHERE (userName = \@Original_userName)

以上是关于WPF datagrid 更新数据库的主要内容,如果未能解决你的问题,请参考以下文章

WPF Datagrid:更新太频繁 - 选择丢失

WPF DataGrid - 如何暂停数据绑定中的 UI 更新并稍后进行批量更新

c# wpf datagrid 模板列修改某个单元格,更新所选行另一个单元格的值,如何做到呢?

WPF DataGrid不更新只读值

DataGrid 数据绑定/更新中的 WPF 组合框不起作用

在 DataTable 更改 WPF 后更新绑定到 DataTable 的 DataGrid