5

シナリオは次のとおりです (DataSet 内の DataTable にバインドされた BindingSource を使用します)。

  1. ユーザーが新しいアドレス帳の連絡先を作成し、データ バインドされたコントロールに名と姓を入力します。
  2. そのイベント ハンドラーが BindingSource.EndEdit() を呼び出します。
  3. その後、彼は間違いに気づき、メール アドレスを追加しました。
  4. しかし、彼が [適用] を押すと、検証が失敗する (無効な電子メール形式) ため、EndEdit() は呼び出されません。
  5. 彼は編集を行わないことに決め、イベント ハンドラが BindingSource.CancelEdit() を呼び出す [キャンセル] ボタンを押します。
  6. しかし、BindingSource は姓と名だけで電子メールを持たない新しい連絡先に戻すのではなく、レコード全体を削除しました。

最後に EndEdit() が呼び出されてからのアクションのみを元に戻す方法はありますか? CancelEdit() がどのように機能するはずだったのかという印象を受けました。

4

1 に答える 1

3

説明として、DataTable は、レコードに対して Original と Current の 2 つの状態のみを保持します。リクエストには複数の州が必要です。

目的を達成するには、Apply の成功に応答して変更をデータベース (Adapter.Update(table) など) にフラッシュする必要があります。これにより、Current が Original に昇格し、次の Cancel でそれにフォールバックできます。

ただし、これは要件に一致する場合と一致しない場合があります。

于 2009-08-03T19:59:28.973 に答える