方法 : データの保存前にデータ バインド コントロールで実行中の編集をコミットする
公開日: 2016年4月
データ バインド コントロールで値を編集した場合は、現在のレコード以外に移動し、更新した値をコントロールがバインドされた基になるデータ ソースにコミットする必要があります。 項目をウィンドウからフォームにドラッグすると、ドロップした最初の項目により、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 void EndEditOnAllBindingSources() { var BindingSourcesQuery = from Component bindingSources in this.components.Components where bindingSources is BindingSource select bindingSources; foreach (BindingSource bindingSource in BindingSourcesQuery) { bindingSource.EndEdit(); } }
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
フォームのデータを保存するすべての呼び出し (
TableAdapterManager.UpdateAll()
メソッド) の直前に、次のコード行を追加します。EndEditOnAllBindingSources();
Me.EndEditOnAllBindingSources()
参照
階層更新の概要
TableAdapterManager の概要
TableAdapter の概要
BindingSource コンポーネントの概要