方法 : ホスト コントロールからのデータでデータ ソースを更新する
ホスト コントロールをデータ ソースにバインドし、データ ソースを更新すると、その変更内容はコントロール内のデータにも反映されます。 このプロセスは、主に 2 つの手順で構成されます。
コントロールで変更されたデータを使用して、インメモリ データ ソースを更新します。 一般に、インメモリ データ ソースは DataSet、DataTable、またはその他のデータ オブジェクトです。
インメモリ データ ソースで変更されたデータを使用して、データベースを更新します。 これは、データ ソースが SQL Server や Microsoft Office Access データベースなどのバックエンド データベースに接続されている場合にのみ有効です。
ホスト コントロールとデータ バインディングの詳細については、「ホスト項目とホスト コントロールの概要」および「Office ソリューションでのコントロールへのデータのバインド」を参照してください。
対象: このトピックの情報は、Excel 2007 と Excel 2010、および Word 2007 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
インメモリ データ ソースの更新
既定では、単純データ バインディングを有効にしているホスト コントロール (Word 文書のコンテンツ コントロールや Excel ワークシートの名前付き範囲コントロールなど) は、データの変更内容をインメモリ データ ソースに保存しません。 つまり、エンド ユーザーがホスト コントロールの値に変更を加えてからコントロールの外に移動すると、コントロールの新しい値は自動的にはデータ ソースに保存されません。
データ ソースにデータを保存するには、実行時に特定のイベントに応答してデータ ソースを更新するコードを記述します。または、コントロールの値が変更されたときに自動的にデータ ソースを更新するようにコントロールを構成することもできます。
インメモリ データ ソースに ListObject の変更を保存する必要はありません。 ListObject コントロールをデータにバインドすると、ListObject コントロールは変更内容を自動的にインメモリ データ ソースに保存します。追加のコードを記述する必要はありません。
実行時にインメモリ データ ソースを更新するには
コントロールをデータ ソースにバインドする Binding オブジェクトの WriteValue メソッドを呼び出します。
Excel ワークシートの NamedRange コントロールに加えられた変更をデータ ソースに保存する例を次に示します。 この例は、namedRange1 という名前の NamedRange コントロールで Value2 プロパティがデータ ソースのフィールドにバインドされていることを前提としています。
Me.NamedRange1.DataBindings("Value2").WriteValue()
this.namedRange1.DataBindings["Value2"].WriteValue();
インメモリ データ ソースの自動更新
インメモリ データ ソースを自動的に更新するように、コントロールを構成することもできます。 ドキュメント レベルのプロジェクトでこれを行うには、コードまたはデザイナーを使用します。 アプリケーション レベルのプロジェクトでは、コードを使用する必要があります。
コードを使用してインメモリ データ ソースを自動的に更新するようにコントロールを設定するには
コントロールをデータ ソースにバインドする Binding オブジェクトの System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged モードを使用します。 データ ソースの更新には 2 つのオプションがあります。
コントロールの検証時にデータ ソースを更新するには、このプロパティを System.Windows.Forms.DataSourceUpdateMode.OnValidation に設定します。
コントロールのデータ バインド プロパティの値が変更されたときにデータ ソースを更新するには、このプロパティを System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged に設定します。
注意
System.Windows.Forms.DataSourceUpdateMode.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 を使用してデータを更新する
方法 : ワークシート内でデータベースのレコードをスクロールする