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