1

我做了这个小应用程序来玩 DbConnection 类。除其他外,我的 dbConnect 类检索通过合适的 DataAdapter 填充的 DataTable 对象,该对象通过参数化查询实现运行时生成的更新、插入和删除命令。然后,我将 wpf DataGrid.DataContext 绑定到此类表以允许数据操作。用户可以删除、更新和/或插入任意数量的行,然后单击按钮控件(“更新”)可以将更改提交到底层数据库。我的问题是删除的行没有反映在数据库中作为插入/修改的行。这是一些代码:

Xaml Datagrid ItemSource 绑定:

 <DataGrid Grid.Row="2" Name="dataGrid1" ItemsSource="{Binding Path=.}" ... />

后面的代码:

DataTable table = new DataTable();

if (!String.IsNullOrEmpty(tableName = cbox.SelectedItem as string))
{
    table = _dbc.getData( tableName );
    dataGrid1.Items.Refresh();
    dataGrid1.DataContext = table.DefaultView;
    table.DefaultView.ListChanged += new System.ComponentModel.ListChangedEventHandler(dataView_ListChanged);  // Needed to enable the 'Update' button to, well, update the Database

    if (table.Rows.Count == 0) warnMsg = "The selected table (" + tableName.ToUpper() + ") is empty.";
}

如果在按钮逻辑调用 DbConnect 类 (_dbc, here) 的公共方法 (committChanges(DataRow[] rows) 时对数据网格/数据表的行进行了更改,则 listChanged 事件处理程序仅启用/禁用“更新”按钮turn 只需调用 (DataAdapter) dapt.Update() 方法。

请注意,在以前版本的 dbConnect 类中,我将 DataTable 的 RowChanging 和 RowDeleting 事件挂钩到 committChanges 方法以进行单行更新(添加、删除或修改),并且所有更改都成功反映到数据库中,因此逻辑本身应该是美好的。任何输入都可以。谢谢。

4

0 回答 0