DeleteContact
DeleteContact メソッドを使用すると、データベースから連絡先とその電話番号を削除できます。このメソッドは、まずデータ・セットから行を削除し、その後、その変更を Caché に伝達します。DeleteContact は、[削除] ボタンのイベント・ハンドラによって呼び出されます。具体的には、DeleteContact は、次のような動作をします。
-
GUI パネルのテキスト・ボックスから Contact ID を読み取ります。
-
ADO.NET の DataRowCollection クラスの Find メソッドを使用して、Contacts データ・テーブルから該当する ID 値を持つ行を探します。
-
DataRow クラスの Delete メソッドを使用して、削除するターゲット行をマーキングします。この場合、Contacts と PhoneNumbers との間には親子リレーションシップがあるので、PhoneNumbers の子にある行も削除の対象としてマーキングされます。
-
phoneAdapter に対して Update を呼び出します。これは、データ・セットを Provider.PhoneNumber テーブルに接続する CacheDataAdapter オブジェクトです。Update により、Caché の Provider.PhoneNumbers テーブルから、PhoneNumbers で削除の対象としてマーキングされた行が削除されます。
-
conAdapter に対して Update を呼び出します。これは、データ・セットを Provider.Contact テーブルに接続する CacheDataAdapter オブジェクトです。Update により、Caché の Provider.Contact テーブルから、Contacts で削除の対象としてマーキングされた行が削除されます。
-
既に PhoneForm.cs に記述済みのメソッドである ClearPhone フォームを呼び出し、[連絡先情報の編集] GUI パネルで該当の連絡先の情報をクリアします。
-
DisplayTreeView を起動して、GUI のツリーのデータを再表示します。
このメソッドの本文を、PhoneForm.cs の DeleteContact スタブに追加します。
private void DeleteContact()
{
DataRow targetRow = ds.Tables["Contacts"].Rows.Find(txtConId.Text);
targetRow.Delete();
phoneAdapter.Update(ds,"PhoneNumbers");
conAdapter.Update(ds, "Contacts");
ClearContactForm();
ClearPhoneForm();
DisplayTreeView();
}
データ・セットからデータ・ソースを更新する場合、影響される行を正しい順序で更新することが重要です。削除の場合は、親の行を更新する前に、子の行を更新する必要があります。上記のコードで Provider.Contact の前に Provider.PhoneNumber を更新しているのは、そのためです。