次の方法で共有


方法 : データの保存前にデータ バインド コントロールで実行中の編集をコミットする

 

公開日: 2016年4月

データ バインド コントロールで値を編集した場合は、現在のレコード以外に移動し、更新した値をコントロールがバインドされた基になるデータ ソースにコミットする必要があります。 項目をウィンドウからフォームにドラッグすると、ドロップした最初の項目により、BindingNavigator の保存ボタン クリック イベントにコードが生成されます。 このコードは、BindingSourceEndEdit メソッドを呼び出します。 このため、EndEdit メソッドへの呼び出しは、フォームに最初に追加した BindingSource に対してのみ生成されます。

EndEdit 呼び出しは、現在編集中のデータ バインド コントロールで実行されている変更をコミットします。 したがって、あるデータ バインド コントロールにフォーカスがある状態で、[保存] ボタンをクリックすると、実際の保存 (TableAdapterManager.UpdateAll メソッド) が実行される前に、そのコントロール内のすべての保留中の編集がコミットされます。

ユーザーが変更をコミットせずにデータを保存しようとしても、保存処理の一部として変更が自動的にコミットされるようにアプリケーションを構成できます。

注意

デザイナーは、フォームに最初にドロップされた項目に対してのみ BindingSource.EndEdit コードを追加します。 したがって、フォーム上の各 BindingSource に対して EndEdit メソッドを呼び出すコード行を追加する必要があります。 各 BindingSource に対して EndEdit メソッドを呼び出すコード行は、手動で追加できます。 または、EndEditOnAllBindingSources メソッドをフォームに追加して、保存を実行する前に呼び出すこともできます。

次のコードでは、LINQ (Language-Integrated Query) クエリを使用してすべての BindingSource コンポーネントを反復処理し、フォーム上の各 BindingSource に対して EndEdit メソッドを呼び出します。

フォーム上のすべての BindingSource コンポーネントに対して EndEdit を呼び出すには

  1. 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
    
  2. フォームのデータを保存するすべての呼び出し (TableAdapterManager.UpdateAll() メソッド) の直前に、次のコード行を追加します。

                EndEditOnAllBindingSources();
    
            Me.EndEditOnAllBindingSources()
    

参照

階層更新の概要
TableAdapterManager の概要
TableAdapter の概要
BindingSource コンポーネントの概要