Office ソリューションのコントロールにデータをバインドするBind data to controls in Office solutions

Microsoft Office Word 文書または Microsoft Office Excel ワークシート上の Windows フォーム コントロールや ホスト コントロール を、データ ソースにバインドできます。この場合、コントロールには自動的にデータが表示されます。You can bind Windows Forms controls and host controls on a Microsoft Office Word document or Microsoft Office Excel worksheet to a data source so the controls automatically display the data. アプリケーション レベルのプロジェクトとドキュメント レベルのプロジェクトの両方で、コントロールにデータをバインドできます。You can bind data to controls in both application-level and document-level projects.

適用対象: このトピックの情報は、ドキュメントに適用されます-レベルのプロジェクトおよび VSTO 追加-プロジェクト。Applies to: The information in this topic applies to document-level projects and VSTO Add-in projects. 参照してくださいOffice アプリケーションおよびプロジェクトの種類で使用できる機能します。See Features available by Office application and project type.

ホスト コントロールは、Word や Excel のオブジェクト モデルにあるオブジェクトを拡張します。たとえば、Word のコンテンツ コントロールや Excel の名前付き範囲が挙げられます。Host controls extend objects that are in the Word and Excel object models, such as content controls in Word and named ranges in Excel. 詳細については、「ホスト項目とホストコントロールの概要」を参照してください。For more information, see Host items and host controls overview.

Windows フォーム コントロールとホスト コントロールはいずれも Windows フォームのデータ バインディング モデルを使用します。このモデルでは、データセットやデータ テーブルなどのデータ ソースに対して 単純データ バインディング複合データ バインディング の両方がサポートされます。Both Windows Forms and host controls use the Windows Forms data binding model, which supports both simple data binding and complex data binding to data sources such as datasets and data tables. Windows フォームでのデータバインディングモデルの詳細については、「データバインドと Windows フォーム」を参照してください。For complete information about the data binding model in Windows Forms, see Data bind and Windows Forms.

単純データ バインディングSimple data binding

単純データ バインディングは、コントロール プロパティが、データ テーブル内の値など、単一のデータ要素にバインドされる場合に存在します。Simple data binding exists when a control property is bound to a single data element, such as a value in a data table. たとえば、 NamedRange コントロールは、データセット内のフィールドにバインドできる Value2 プロパティを持ちます。For example, the NamedRange control has a Value2 property that can be bound to a field in a dataset. データセット内のフィールドが変更されると、名前付き範囲内の値も変更されます。When the field in the dataset changes, the value in the named range also changes. XMLNodes コントロールを除くすべてのホスト コントロールが、単純データ バインディングをサポートしています。All host controls, except for the XMLNodes control, support simple data binding. XMLNodes コントロールはコレクションであるため、データ バインディングをサポートしません。The XMLNodes control is a collection, and therefore it does not support data binding.

ホスト コントロールへの単純データ バインディングを実行するには、コントロールの DataBindings プロパティに Binding を追加します。To perform simple data binding to a host control, add a Binding to the DataBindings property of the control. Binding オブジェクトは、コントロールのプロパティ値とデータ要素の値との間の単純バインディングを表します。A Binding object represents the simple binding between a property value of the control and the value of a data element.

ドキュメント レベルのプロジェクトにあるデータ要素に Value2 プロパティをバインドする方法を、次の例に示します。The following example demonstrates how to bind the Value2 property to a data element in a document-level project.

Dim binding1 As New Binding("Value2", ds, "Customers.Names", True)
namedRange1.DataBindings.Add(binding1)
Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

単純なデータバインディングを示すチュートリアルについては、「チュートリアル: ドキュメントレベルのプロジェクトのドキュメントレベルのプロジェクトの単純なデータバインディング」と「チュートリアル: vsto アドインプロジェクトのvsto アドインプロジェクトの単純なデータバインディング」を参照してください。For walkthroughs that demonstrates simple data binding, see Walkthrough: Simple data binding in a document-level project for a document-level project and Walkthrough: Simple data binding in VSTO Add-in project for a VSTO Add-in project.

複合データ バインディングComplex data binding

複合データ バインディングは、コントロール プロパティが、データ テーブル内の複数の列など、複数のデータ要素にバインドされる場合に存在します。Complex data binding exists when a control property is bound to more than one data element, such as multiple columns in a data table. Excel の ListObject コントロールは、複合データ バインディングをサポートする唯一のホスト コントロールです。The ListObject control for Excel is the only host control that supports complex data binding. ただし、複合データ バインディングをサポートする Windows フォーム コントロールが数多くあります ( DataGridView コントロールなど)。There are also many Windows Forms controls that support complex data binding, such as the DataGridView control.

複合データ バインディングを実行するには、コントロールの DataSource プロパティを、複合データ バインディングでサポートされるデータ ソース オブジェクトに設定します。To perform complex data binding, set the DataSource property of the control to a data source object that is supported by complex data binding. たとえば、 DataSource コントロールの ListObject プロパティは、データ テーブル内の複数の列にバインドできます。For example, the DataSource property of the ListObject control can be bound to multiple columns in a data table. データ テーブル内のすべてのデータは ListObject コントロールに表示され、データ テーブル内のデータが変更されると、 ListObject も変更されます。All of the data in the data table appears in the ListObject control, and as the data in the data table changes, the ListObject also changes. 複合データバインディングに使用できるデータソースの一覧については、「 Windows フォームでサポートされるデータソース」を参照してください。For a list of the data sources that you can use for complex data binding, see Data sources supported by Windows Forms.

次のコード例は、2 つの DataSet オブジェクトを持つ DataTable を作成し、そのうち 1 つのテーブルにデータを入力します。The following code example creates a DataSet with two DataTable objects and populates one of the tables with data. 次に、コードはデータを含むテーブルに ListObject をバインドします。The code then binds the ListObject to the table that contains data. これは、Excel のドキュメント レベルのプロジェクト用の例です。This example is for an Excel document-level project.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}
Private Sub ListObject_DataSourceAndMember()
    ' Create a DataSet and two DataTables.
    Dim ordersDataSet As New DataSet("ordersDataSet")
    Dim tableCustomers As New DataTable("Customers")
    Dim tableProducts As New DataTable("Products")
    ordersDataSet.Tables.Add(tableCustomers)
    ordersDataSet.Tables.Add(tableProducts)

    ' Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(New DataColumn("LastName"))
    tableCustomers.Columns.Add(New DataColumn("FirstName"))
    Dim dr As DataRow = tableCustomers.NewRow()
    dr("LastName") = "Chan"
    dr("FirstName") = "Gareth"
    tableCustomers.Rows.Add(dr)

    ' Create a list object.
    Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
        Me.Controls.AddListObject(Me.Range( _
        "A1"), "Customers")

    ' Bind the list object to the Customers table.
    List1.AutoSetDataBoundColumnHeaders = True
    List1.DataSource = ordersDataSet
    List1.DataMember = "Customers"

End Sub

複雑なデータバインディングを示すチュートリアルについては、「チュートリアル: ドキュメントレベルのプロジェクトのドキュメントレベルのプロジェクトでの複合データバインディング」と「チュートリアル: vsto アドインプロジェクトのvsto アドインプロジェクトでの複合データバインディング」を参照してください。For walkthroughs that demonstrate complex data binding, see Walkthrough: Complex data binding in a document-level project for a document-level project and Walkthrough: Complex data binding in VSTO Add-in project for a VSTO Add-in project.

ドキュメントとブックにデータを表示するDisplay data in documents and workbooks

ドキュメント レベルのプロジェクトでは、Windows フォームで使用する場合と同じように [データ ソース] ウィンドウを使用して、文書やブックにデータ バインド コントロールを簡単に追加できます。In document-level projects, you can use the Data Sources window to add data-bound controls to your documents or workbooks easily, the same way you use it for Windows Forms. [データソース] ウィンドウの使用方法の詳細については、「 Visual Studio でデータに Windows フォームコントロールをバインドする」および「新しいデータソースを追加する」を参照してください。For more information about using the Data Sources window, see Bind Windows Forms controls to data in Visual Studio and Add new data sources.

[データソース] ウィンドウからコントロールをドラッグするDrag controls from the Data Sources window

[データ ソース] ウィンドウからオブジェクトをドラッグすると、ドキュメントにコントロールが作成されます。A control is created on the document when you drag an object onto it from the Data Sources window. 作成されるコントロールの種類は、単一のデータ列をバインドするか、複数のデータ列をバインドするかによって異なります。The type of control that is created depends on whether you are binding a single column of data or multiple columns of data.

Excel の場合、フィールドごとに NamedRange コントロールがワークシートに作成され、複数の行と列を含むデータ範囲ごとに ListObject コントロールが作成されます。For Excel, a NamedRange control is created on the worksheet for each individual field, and a ListObject control is created for each data range that includes multiple rows and columns. この既定の動作を変更するには、 [データ ソース] ウィンドウでテーブルまたはフィールドを選び、ドロップダウン リストで別のコントロールを選びます。You can change this default by selecting the table or field in the Data Sources window and then choosing a different control from the drop-down list.

ContentControl コントロールが文書に追加されます。A ContentControl control is added to documents. コンテンツ コントロールの種類は、選んだフィールドのデータ型によって異なります。The type of content control depends on the data type of the field that you selected.

デザイン時にドキュメントレベルのプロジェクトのデータをバインドするBind data in document-level projects at design time

以下のトピックでは、デザイン時にデータをバインドする例を示しています。The following topics show examples of binding data at design time:

VSTO アドインプロジェクトでのデータのバインドBind data in VSTO Add-in projects

VSTO アドイン プロジェクトでは、コントロールを追加できるのは実行時だけです。In VSTO Add-in projects, you can add controls only at run time. 以下のトピックでは、実行時にデータをバインドする例を示しています。The following topics show examples of binding data at run time:

ホストコントロールにバインドされているデータの更新Update data that is bound to host controls

データ ソースとホスト コントロールの間のデータ バインディングでは、双方向のデータ更新が必要です。Data binding between a data source and a host control involves a two-way data update. 単純データ バインディングでは、データ ソースでの変更は自動的にホスト コントロールに反映されますが、ホスト コントロールでの変更の場合、明示的な呼び出しによってデータ ソースを更新する必要があります。In simple data binding, changes in the data source are reflected automatically in the host control, but changes in the host control require an explicit call to update the data source. これは、別のデータ バインド フィールドで行われた変更が伴わない限り、あるデータ バインド フィールドで行われた変更が受け付けられないことがあるためです。The reason is that in some cases, changes in one data-bound field are not accepted unless they are accompanied by changes in another data-bound field. たとえば、2 つのフィールドがあり、1 つは年齢、1 つは経験年数を示すものとします。For example, you might have two fields, one for age and one for years of experience. 経験年数が年齢を上回ることはありません。Experience cannot exceed age. 同時に変更しない限り、ユーザーは年齢を 50 から 25 に更新し、経験年数を 30 から 10 に更新することはできません。A user cannot update the age from 50 to 25 and then the experience from 30 to 10 unless he or she makes the changes at the same time. この問題を解決するために、単純データ バインディングのフィールドは、更新がコードで明示的に送信されるまで更新されないようになっています。To solve this problem, fields with simple data binding are not updated until the updates are explicitly sent by code.

単純データ バインディングを有効にしているホスト コントロールからデータ ソースを更新するには、更新をメモリ内データ ソース ( DataSetDataTableなど) に送信する必要があります。ソリューションでバックエンド データベースを使用している場合は、バックエンド データベースにも更新を送信する必要があります。To update a data source from host controls that enable simple data binding, you must send updates to the in-memory data source (such as a DataSet or DataTable) and to the back-end database, if your solution uses one.

ListObject コントロールを使用して複合データ バインディングを実行するときは、メモリ内データ ソースを明示的に更新する必要はありません。You do not need to explicitly update the in-memory data source when you perform complex data binding using the ListObject control. この場合には、コードを追加しなくても、メモリ内データ ソースに変更が自動的に送信されます。In that case, changes are automatically sent to the in-memory data source without additional code.

詳細については、「方法: ホストコントロールのデータを使用してデータソースを更新する」を参照してください。For more information, see How to: Update a data source with data from a host control.

関連項目See also