私はこの小さなアプリケーションを作成して、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.";
}
listChanged イベント ハンドラーは、ボタン ロジックが DbConnect クラス (ここでは _dbc) のパブリック メソッド (committChanges( DataRow[] rows) を呼び出している間に、データグリッド/データ テーブルの行に変更が加えられた場合、単に [更新] ボタンを有効/無効にします。 turn は単に (DataAdapter) dapt.Update() メソッドを呼び出します。
以前のバージョンの dbConnect クラスでは、DataTable の RowChanging および RowDeleting イベントを単一行の更新 (追加、削除、または変更) のために committChanges メソッドにフックしていたことに注意してください。すべての変更は正常にデータベースに反映されたので、ロジック自体は大丈夫。どんな入力でも構いません。ありがとう。