方法 : データの保存前にデータ バインド コントロールで実行中の編集をコミットする
更新 : 2007 年 11 月
データ バインド コントロールで値を編集した場合は、現在のレコード以外に移動し、更新した値をコントロールがバインドされた基になるデータ ソースにコミットする必要があります。項目を[データ ソース] ウィンドウからフォームにドラッグすると、ドロップした最初の項目により、BindingNavigator の保存ボタン クリック イベントにコードが生成されます。このコードは、BindingSource の EndEdit メソッドを呼び出します。このため、EndEdit メソッドへの呼び出しは、フォームに最初に追加した BindingSource に対してのみ生成されます。
EndEdit 呼び出しは、現在編集中のデータ バインド コントロールで実行されている変更をコミットします。したがって、あるデータ バインド コントロールにフォーカスがある状態で、[保存] ボタンをクリックすると、実際の保存 (TableAdapterManager.UpdateAll メソッド) が実行される前に、そのコントロール内のすべての保留中の編集がコミットされます。
ユーザーが変更をコミットせずにデータを保存しようとしても、保存処理の一部として変更が自動的にコミットされるようにアプリケーションを構成できます。
メモ : |
---|
デザイナは、フォームに最初にドロップされた項目に対してのみ BindingSource.EndEdit コードを追加します。したがって、フォーム上の各 BindingSource に対して EndEdit メソッドを呼び出すコード行を追加する必要があります。各 BindingSource に対して EndEdit メソッドを呼び出すコード行は、手動で追加できます。または、EndEditOnAllBindingSources メソッドをフォームに追加して、保存を実行する前に呼び出すこともできます。 |
次のコードでは、統合言語クエリ (LINQ: Language-Integrated Query) クエリを使用してすべての BindingSource コンポーネントを反復処理し、フォーム上の各 BindingSource に対して EndEdit メソッドを呼び出します。
フォーム上のすべての BindingSource コンポーネントに対して EndEdit を呼び出すには
BindingSource コンポーネントが含まれるフォームに次のコードを追加します。
Private Sub EndEditOnAllBindingSources() Dim BindingSourcesQuery = From bindingsources In Me.components.Components _ Where (TypeOf bindingsources Is Windows.Forms.BindingSource) _ Select bindingsources For Each bindingSource As Windows.Forms.BindingSource In BindingSourcesQuery bindingSource.EndEdit() Next End Sub
private void EndEditOnAllBindingSources() { var BindingSourcesQuery = from Component bindingSources in this.components.Components where bindingSources is BindingSource select bindingSources; foreach (BindingSource bindingSource in BindingSourcesQuery) { bindingSource.EndEdit(); } }
フォームのデータを保存するすべての呼び出し (TableAdapterManager.UpdateAll() メソッド) の直前に、次のコード行を追加します。
Me.EndEditOnAllBindingSources()
EndEditOnAllBindingSources();