次の方法で共有


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

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

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

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

  • 実行時、文書に ContentControl を追加する。

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

  • ユーザーがレコード間をスクロールし、コントロールで表示できるようにする。

注意

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

必須コンポーネント

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

-

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

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

新規プロジェクトの作成

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

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

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

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

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

  2. プロジェクトが .NET Framework 4 を対象としている場合は、Microsoft.Office.Tools.Word.v4.0.Utilities.dll アセンブリへの参照を追加します。 この参照は、このチュートリアルの後半で Windows フォーム コントロールをドキュメントにプログラムで追加するのに必要です。

データ ソースの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このチュートリアルでデータベース レコードの表示に使用するインターフェイスは基本的なもので、文書内部に作成されます。 1 つの ContentControl は、一度に 1 つのデータベース レコードを表示します。2 つの Button コントロールを使用すると、レコード間をスクロールできます。 コンテンツ コントロールは BindingSource を使用してデータベースに接続します。

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

文書にインターフェイスを作成するには

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

    Private adventureWorksDataSet As AdventureWorksLTDataSet
    Private customerTableAdapter As AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter
    Private customerBindingSource As System.Windows.Forms.BindingSource
    Private customerContentControl As Microsoft.Office.Tools.Word.RichTextContentControl
    Private WithEvents button1 As Microsoft.Office.Tools.Word.Controls.Button
    Private WithEvents button2 As Microsoft.Office.Tools.Word.Controls.Button
    
    private AdventureWorksLTDataSet adventureWorksDataSet;
    private AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter customerTableAdapter;
    private System.Windows.Forms.BindingSource customerBindingSource;
    private Microsoft.Office.Tools.Word.RichTextContentControl customerContentControl;
    private Microsoft.Office.Tools.Word.Controls.Button button1;
    private Microsoft.Office.Tools.Word.Controls.Button button2;
    
  2. ThisAddIn_Startup メソッドに次のコードを追加し、データセットを初期化して、AdventureWorksLTDataSet データベースから得た情報をデータセットに設定します。

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

    Dim currentDocument As Word.Document = Me.Application.ActiveDocument
    
    ' Use the following line of code in projects that target the .NET Framework 4.
    Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
    
    ' In projects that target the .NET Framework 3.5, use the following line of code instead.
    ' Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
    Word.Document currentDocument = this.Application.ActiveDocument;
    
    // Use the following line of code in projects that target the .NET Framework 4.
    Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
    
    // In projects that target the .NET Framework 3.5, use the following line of code instead.
    // Document extendedDocument = currentDocument.GetVstoObject();
    
  4. 文書の先頭に範囲を定義します。 これらの範囲により、テキストを挿入してコントロールを配置する場所が特定されます。

    extendedDocument.Paragraphs(1).Range.InsertParagraphBefore()
    extendedDocument.Paragraphs(1).Range.InsertParagraphBefore()
    extendedDocument.Paragraphs(1).Range.Text = "The companies listed in the AdventureWorksLT database:   "
    extendedDocument.Paragraphs(2).Range.Text = "  "
    
    Dim range1 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.First
    Dim range2 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.Last
    Dim range3 As Word.Range = extendedDocument.Paragraphs(1).Range.Characters.Last
    
    extendedDocument.Paragraphs[1].Range.InsertParagraphBefore();
    extendedDocument.Paragraphs[1].Range.InsertParagraphBefore();
    extendedDocument.Paragraphs[1].Range.Text = 
        "The companies listed in the AdventureWorksLT database:   \n";
    extendedDocument.Paragraphs[2].Range.Text = "  "; 
    
    Word.Range range1 = extendedDocument.Paragraphs[2].Range.Characters.First;
    Word.Range range2 = extendedDocument.Paragraphs[2].Range.Characters.Last;
    Word.Range range3 = extendedDocument.Paragraphs[1].Range.Characters.Last;
    
  5. 定義した範囲に、インターフェイス コントロールを追加します。

    Me.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1")
    Me.button1.Text = "Previous"
    Me.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2")
    Me.button2.Text = "Next"
    
    Me.customerContentControl = extendedDocument.Controls.AddRichTextContentControl(range3, _
        "richTextContentControl1")
    
    this.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1");
    this.button1.Text = "Previous";
    this.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2");
    this.button2.Text = "Next";
    
    this.customerContentControl = extendedDocument.Controls.AddRichTextContentControl(
        range3, "richTextContentControl1");
    
  6. BindingSource を使用して、コンテンツ コントロールを AdventureWorksLTDataSet にバインドします。 C# を使用して開発している場合は、Button コントロールの 2 つのイベント ハンドラーを追加します。

    Me.customerBindingSource.DataSource = Me.adventureWorksDataSet.Customer
    Me.customerContentControl.DataBindings.Add("Text", Me.customerBindingSource, _
        "CompanyName", True, Me.customerContentControl.DataBindings.DefaultDataSourceUpdateMode)
    
    this.customerBindingSource.DataSource = this.adventureWorksDataSet.Customer;
    this.customerContentControl.DataBindings.Add("Text", this.customerBindingSource, 
        "CompanyName", true, this.customerContentControl.DataBindings.DefaultDataSourceUpdateMode);
    
    this.button1.Click += new EventHandler(button1_Click);
    this.button2.Click += new EventHandler(button2_Click);
    
  7. 次のコードを追加して、データベース レコード間を移動します。

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button1.Click
        Me.customerBindingSource.MovePrevious()
    End Sub
    
    Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button2.Click
        Me.customerBindingSource.MoveNext()
    End Sub
    
    void button1_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MovePrevious();
    }
    
    void button2_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MoveNext();
    }
    

アドインのテスト

Word を開くと、コンテンツ コントロールにより AdventureWorksLTDataSet データセットのデータが表示されます。 [次へ] ボタンと [前へ] ボタンをクリックして、データベース レコード間をスクロールします。

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

  1. F5 キーを押します。

    customerContentControl という名前のコンテンツ コントロールが作成され、データが設定されます。 同時に、adventureWorksLTDataSet という名前のデータセット オブジェクトと、customerBindingSource という名前の BindingSource がプロジェクトに追加されます。 ContentControlBindingSource にバインドされ、さらにこれがデータセット オブジェクトにバインドされます。

  2. [次へ] ボタンと [前へ] ボタンをクリックして、データベース レコード間をスクロールします。

参照

処理手順

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

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

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

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

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

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

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

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

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

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

参照

BindingSource コンポーネントの概要

概念

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

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

データ ソースの概要

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

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

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

その他の技術情報

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