我用这个小应用程序来玩DbConnection类。我的dbConnect类检索了一个DataTable对象,该对象通过合适的DataAdapter填充,通过参数化查询实现运行时生成的更新,插入和删除命令。然后,我将一个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类的公共方法(committChanges(DataRow []行)时对listgrid / datatable的行进行了更改,则listChanged事件处理程序只会启用/禁用“更新”按钮(_dbc,此处为)反过来简单地调用(DataAdapter)dapt.Update()方法。
请注意,在以前版本的dbConnect类中,我将DataTable的RowChanging和RowDeleting事件挂钩到committChanges方法,以便单行更新(添加,删除或修改),并且所有更改都成功反映到db中,因此逻辑本身应该没问题。任何输入都可以。感谢。