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.";
}

listChanged イベント ハンドラーは、ボタン ロジックが DbConnect クラス (ここでは _dbc) のパブリック メソッド (committChanges( DataRow[] rows) を呼び出している間に、データグリッド/データ テーブルの行に変更が加えられた場合、単に [更新] ボタンを有効/無効にします。 turn は単に (DataAdapter) dapt.Update() メソッドを呼び出します。

以前のバージョンの dbConnect クラスでは、DataTable の RowChanging および RowDeleting イベントを単一行の更新 (追加、削除、または変更) のために committChanges メソッドにフックしていたことに注意してください。すべての変更は正常にデータベースに反映されたので、ロジック自体は大丈夫。どんな入力でも構いません。ありがとう。

4

0 に答える 0