次の方法で共有


チュートリアル : アプリケーション レベルのプロジェクトでの複合データ バインディング

アプリケーション レベルのプロジェクトでは、ホスト コントロールと Windows フォーム コントロールにデータをバインドできます。 このチュートリアルでは、実行時に Microsoft Office Excel ブックにコントロールを追加し、そのコントロールをデータにバインドする方法を説明します。

対象: このトピックの情報は、Excel 2007 と Excel 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

このチュートリアルでは、次の作業について説明します。

  • 実行時に、ワークシートに ListObject コントロールを追加する。

  • データセットのインスタンスにコントロールを接続する BindingSource を作成する。

注意

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

-

Microsoft Office 開発者ツールを含むエディションの Visual Studio 2010。 詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.100\).md)」を参照してください。
  • Excel 2007 または Excel 2010

  • AdventureWorksLT サンプル データベースが関連付けられている SQL Server 2005 または SQL Server 2005 Express の実行中のインスタンスへのアクセス。 AdventureWorksLT データベースは、CodePlex の Web サイトからダウンロードできます。 データベースを関連付ける方法の詳細については、以下のトピックを参照してください。

新規プロジェクトの作成

まず、Excel 用のアドイン プロジェクトを作成します。

新しいプロジェクトを作成するには

  • Visual Basic または C# を使用して、Populating Worksheets from a Database という名前の Excel アドイン プロジェクトを作成します。

    詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

    Visual Studio は ThisAddIn.vb ファイルまたは ThisAddIn.cs ファイルを開き、Populating Worksheets from a Database プロジェクトをソリューション エクスプローラーに追加します。

データ ソースの作成

[データ ソース] ウィンドウを使用して型指定されたデータセットをプロジェクトに追加します。

型指定されたデータセットをプロジェクトに追加するには

  1. [データ] メニューの [新しいデータ ソースの追加] をクリックします。

    データ ソース構成ウィザードが開きます。

  2. [データベース] をクリックし、[次へ] をクリックします。

  3. AdventureWorksLT データベースへの接続が既に設定されている場合は、その接続を選択し、[次へ] をクリックします。

    それ以外の場合は、[新しい接続] をクリックし、[接続の追加] ダイアログ ボックスを使用して新しい接続を作成します。 詳細については、「方法 : データベース内のデータに接続する」を参照してください。

  4. [アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックします。

  5. [データベース オブジェクトの選択] ページで、[テーブル] を展開し、[Address (SalesLT)] を選択します。

  6. [完了] をクリックします。

    AdventureWorksLTDataSet.xsd ファイルがソリューション エクスプローラーに追加されます。 このファイルでは、次の項目を定義します。

    • AdventureWorksLTDataSet という名前の型指定されたデータセット。 このデータセットは、AdventureWorksLT データベースの Address (SalesLT) テーブルの内容を表します。

    • AddressTableAdapter という名前の TableAdapterTableAdapter は、AdventureWorksLTDataSet のデータを読み書きするために使用します。 詳細については、「TableAdapter の概要」を参照してください。

    これらのオブジェクトはどちらもこのチュートリアルの後半で使用します。

コントロールの作成とデータへのコントロールのバインド

このチュートリアルでは、ユーザーがブックを開くとすぐに、事前に選択したテーブル内のすべてのデータが ListObject コントロールによって表示されます。 リスト オブジェクトは BindingSource を使用してコントロールをデータベースに接続します。

コントロールのデータへのバインドの詳細については、「Office ソリューションでのコントロールへのデータのバインド」を参照してください。

リスト オブジェクト、データセット、およびテーブル アダプターを追加するには

  1. ThisAddIn クラスで、次のコントロールを宣言し、AdventureWorksLTDataSet データセットの Address テーブルを表示するようにします。

    Private addressListObject As Microsoft.Office.Tools.Excel.ListObject
    Private adventureWorksDataSet As AdventureWorksLTDataSet
    Private addressTableAdapter As AdventureWorksLTDataSetTableAdapters.AddressTableAdapter
    Private addressBindingSource As System.Windows.Forms.BindingSource
    
    private Microsoft.Office.Tools.Excel.ListObject addressListObject;
    private AdventureWorksLTDataSet adventureWorksDataSet;
    private AdventureWorksLTDataSetTableAdapters.AddressTableAdapter addressTableAdapter;
    private System.Windows.Forms.BindingSource addressBindingSource;
    
  2. ThisAddIn_Startup メソッドに次のコードを追加し、データセットを初期化して、AdventureWorksLTDataSet データセットから得た情報をデータセットに設定します。

    Me.addressTableAdapter = New AdventureWorksLTDataSetTableAdapters.AddressTableAdapter()
    Me.adventureWorksDataSet = New AdventureWorksLTDataSet()
    Me.addressTableAdapter.Fill(Me.adventureWorksDataSet.Address)
    Me.addressBindingSource = New System.Windows.Forms.BindingSource()
    
    this.addressTableAdapter = new AdventureWorksLTDataSetTableAdapters.AddressTableAdapter();
    this.adventureWorksDataSet = new AdventureWorksLTDataSet();
    this.addressTableAdapter.Fill(this.adventureWorksDataSet.Address);
    this.addressBindingSource = new System.Windows.Forms.BindingSource();
    
  3. ThisAddIn_Startup メソッドに次のコードを追加します。 これによりホスト項目が生成され、ワークシートの機能が拡張されます。 詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。

    注意

    次の例は、.NET Framework 4 を対象とするプロジェクトで動作します。 .NET Framework 3.5 を対象とするプロジェクトでこの例を使用する場合は、コード内のコメントを参照してください。

    Dim worksheet As Excel.Worksheet = DirectCast(Me.Application.ActiveWorkbook.Worksheets(1), Excel.Worksheet)
    
    ' Create a workhseet host item for .NET Framework 4 projects.
    Dim extendedWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet)
    
    ' For .NET Framework 3.5 projects, use the following code to create a worksheet host item.
    ' Dim extendedWorksheet As Worksheet = worksheet.GetVstoObject()
    
    Excel.Worksheet worksheet = (Excel.Worksheet)this.Application.ActiveWorkbook.Worksheets[1];
    // Create a workhseet host item for .NET Framework 4 projects.
    Worksheet extendedWorksheet = Globals.Factory.GetVstoObject(worksheet);
    
    // For .NET Framework 3.5 projects, use the following code to create a worksheet host item.
    // Worksheet extendedWorksheet = worksheet.GetVstoObject();
    
  4. 範囲を作成して ListObject コントロールを追加します。

    Dim cell As Excel.Range = extendedWorksheet.Range("$A$1:$G$5", System.Type.Missing)
    Me.addressListObject = extendedWorksheet.Controls.AddListObject(cell, "list1")
    
    Excel.Range cell = extendedWorksheet.Range["$A$1:$G$5", System.Type.Missing];
    this.addressListObject = extendedWorksheet.Controls.AddListObject(cell, "list1");
    
  5. BindingSource を使用して、リスト オブジェクトを AdventureWorksLTDataSet にバインドします。 リスト オブジェクトにバインドする列の名前を渡します。

    Me.addressBindingSource.DataSource = Me.adventureWorksDataSet.Address
    Me.addressListObject.AutoSetDataBoundColumnHeaders = True
    Me.addressListObject.SetDataBinding( _
        Me.addressBindingSource, "", "AddressID", "AddressLine1", _
        "AddressLine2", "City", "StateProvince", "CountryRegion", "PostalCode")
    
    this.addressBindingSource.DataSource = this.adventureWorksDataSet.Address;
    this.addressListObject.AutoSetDataBoundColumnHeaders = true;
    this.addressListObject.SetDataBinding(
        this.addressBindingSource, "", "AddressID", "AddressLine1", 
        "AddressLine2", "City", "StateProvince", "CountryRegion", "PostalCode");
    

アドインのテスト

Excel を開くと、ListObject コントロールにより AdventureWorksLTDataSet データセットの Address テーブルのデータが表示されます。

アドインをテストするには

  • F5 キーを押します。

    addressListObject という名前の ListObject コントロールがワークシートに作成されます。 同時に、adventureWorksLTDataSet という名前のデータセット オブジェクトと、addressBindingSource という名前の BindingSource がプロジェクトに追加されます。 ListObjectBindingSource にバインドされ、さらにこれがデータセット オブジェクトにバインドされます。

参照

処理手順

方法 : データベースのデータをワークシートに読み込む

方法 : データベースからドキュメントにデータを読み込む

方法 : サービスのデータをドキュメントに読み込む

方法 : オブジェクトのデータをドキュメントに読み込む

方法 : ワークシート内でデータベースのレコードをスクロールする

方法 : ホスト コントロールからのデータでデータ ソースを更新する

チュートリアル : ドキュメント レベルのプロジェクトでの単純データ バインディング

チュートリアル : ドキュメント レベルのプロジェクトでの複合データ バインディング

参照

BindingSource コンポーネントの概要

概念

Office ソリューションでのコントロールへのデータのバインド

Office ソリューションにおけるローカル データベース使用の概要

データ ソースの概要

Visual Studio でのデータへの Windows フォーム コントロールのバインド

Office ソリューションにおけるローカル データベース使用の概要

Windows フォーム アプリケーションでのデータへの接続

その他の技術情報

Office ソリューションにおけるデータ