ホスト コントロールからのデータを使用してデータ ソースを更新する
ホスト コントロールをデータ ソースにバインドし、コントロール内のデータに加えられた変更でデータ ソースを更新することができます。 この処理には主に 2 つの手順があります。
コントロールで変更されたデータを使用して、メモリ内データ ソースを更新します。 一般に、メモリ内データ ソースは DataSet、 DataTable、またはその他のデータ オブジェクトです。
メモリ内データ ソースで変更されたデータを使用して、データベースを更新します。 これは、データ ソースが SQL Server や Microsoft Office Access データベースなどのバックエンド データベースに接続されている場合にのみ有効です。
ホスト コントロールとデータ バインディングについて詳しくは、「ホスト項目とホスト コントロールの概要」および「Office ソリューションでコントロールにデータをバインドする」をご覧ください。
対象: このトピックの情報は、Excel および Word のドキュメントレベルのプロジェクトおよび VSTO アドインのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
メモリ内データ ソースを更新する
既定では、単純データ バインディングを有効にしているホスト コントロール (Word 文書のコンテンツ コントロールや Excel ワークシートの名前付き範囲コントロールなど) は、データの変更内容をメモリ内データ ソースに保存しません。 つまり、エンド ユーザーがホスト コントロールの値に変更を加えてからコントロールの外に移動すると、コントロールの新しい値は自動的にはデータ ソースに保存されません。
データ ソースにデータを保存するには、実行時に特定のイベントに応答してデータ ソースを更新するコードを記述します。または、コントロールの値が変更されたときに自動的にデータ ソースを更新するようにコントロールを構成することもできます。
メモリ内データ ソースに ListObject の変更を保存する必要はありません。 ListObject コントロールをデータにバインドすると、 ListObject コントロールは追加のコードなしで変更内容を自動的にメモリ内データ ソースに保存します。
実行時にメモリ内データ ソースを更新するには
コントロールをデータ ソースにバインドする WriteValue オブジェクトの Binding メソッドを呼び出します。
Excel ワークシートの NamedRange コントロールに加えられた変更をデータ ソースに保存する例を次に示します。 この例は、 NamedRange という名前の
namedRange1
コントロールで Value2 プロパティがデータ ソースのフィールドにバインドされていることを前提としています。
メモリ内データ ソースを自動更新する
メモリ内データ ソースを自動的に更新するように、コントロールを構成することもできます。 ドキュメント レベルのプロジェクトでこれを行うには、コードまたはデザイナーを使用します。 VSTO アドイン プロジェクトでは、コードを使用する必要があります。
コードを使用してメモリ内データ ソースを自動的に更新するようにコントロールを設定するには
コントロールをデータソースにバインドする Binding オブジェクトの System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged モードを使用します。 データ ソースの更新には 2 つのオプションがあります。
コントロールの検証時にデータ ソースを更新するには、このプロパティを System.Windows.Forms.DataSourceUpdateMode.OnValidation に設定します。
コントロールのデータ バインド プロパティの値が変更されたときにデータ ソースを更新するには、このプロパティを System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged に設定します。
Note
System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged オプションは、Word ホスト コントロールには適用されません。Word では文書変更やコントロール変更の通知は提供されないためです。 ただし、Word 文書上の Windows フォーム コントロールには、このオプションを使用できます。
コントロールの値が変わると自動的にデータ ソースを更新するように NamedRange コントロールを構成する例を次に示します。 この例は、 NamedRange という名前の
namedRange1
コントロールで Value2 プロパティがデータ ソースのフィールドにバインドされていることを前提としています。
デザイナーを使用してメモリ内データ ソースを自動的に更新するようにコントロールを設定するには
Visual Studio のデザイナーで、Word 文書または Excel ブックを開きます。
データ ソースの自動更新を行うコントロールをクリックします。
[プロパティ] ウィンドウで (DataBindings) プロパティを展開します。
(Advanced) プロパティの横にある省略記号ボタン () をクリックします。
[フォーマットと詳細バインド] ダイアログ ボックスで、 [データ ソース更新モード] ドロップダウン リストをクリックし、次の値のいずれかを選びます。
コントロールの検証時にデータ ソースを更新するには、 [OnValidation]を選びます。
コントロールのデータ バインド プロパティの値が変更されたときにデータ ソースを更新するには、 [OnPropertyChanged]を選びます。
Note
[OnPropertyChanged] オプションは、Word ホスト コントロールには適用されません。Word では文書変更やコントロール変更の通知は提供されないためです。 ただし、Word 文書上の Windows フォーム コントロールには、このオプションを使用できます。
[フォーマットと詳細バインド] ダイアログ ボックスを閉じます。
データベースを更新する
メモリ内データ ソースがデータベースに関連付けられている場合、データ ソースへの変更内容を使用して、データベースを更新する必要があります。 データベースの更新について詳しくは、「データをデータベースに保存する」および「TableAdapter を使用してデータを更新する」をご覧ください。
データベースを更新するには
コントロールの EndEdit の BindingSource メソッドを呼び出します。
デザイン時に文書またはブックにデータ バインド コントロールを追加すると、 BindingSource が自動的に生成されます。 BindingSource によって、コントロールはプロジェクト内の型指定されたデータセットに接続されます。 詳しくは、「BindingSource コンポーネントの概要」をご覧ください。
次のコード例は、プロジェクトに BindingSource という名前の
customersBindingSource
が含まれていることを前提としています。プロジェクトで生成された TableAdapter の
Update
メソッドを呼び出します。TableAdapter は、デザイン時にデータ バインド コントロールを文書やブックに追加したときに、自動的に生成されます。 TableAdapter によって、プロジェクト内の型指定されたデータセットがデータベースに接続されます。 詳細については、TableAdapter の概要に関するページを参照してください。
次のコード例では、Northwind データベースの Customers テーブルに接続していて、
customersTableAdapter
という名前の TableAdapter と、northwindDataSet
という名前の型指定されたデータセットがプロジェクトに含まれていることを前提としています。