Walkthrough: Simple Data Binding in an Application-Level Project

Applies to

The information in this topic applies only to the specified Visual Studio Tools for Office projects and versions of Microsoft Office.

Project type

  • Application-level projects

Microsoft Office version

  • Word 2007

For more information, see Features Available by Application and Project Type.

Starting in Visual Studio 2008 Service Pack 1 (SP1), you can bind data to host controls and Windows Forms controls in application-level projects. This walkthrough demonstrates how to add controls to a Microsoft Office Word document and bind the controls to data at run time.

This walkthrough illustrates the following tasks:

  • Adding a ContentControl to a document at run time.

  • Creating a BindingSource that connects the control to an instance of a dataset.

  • Enabling the user to scroll through the records and view them in the control.

Note

Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. The Visual Studio edition that you have and the settings that you use determine these elements. For more information, see Visual Studio Settings.

Prerequisites

You need the following components to complete this walkthrough:

  • Visual Studio Tools for Office (an optional component of Visual Studio 2008 Professional and Visual Studio Team System).

    Visual Studio Tools for Office is installed by default with the listed versions of Visual Studio. To check whether it is installed, see Installing Visual Studio Tools for Office.

  • Word 2007.

  • Access to a running instance of SQL Server 2005 or SQL Server 2005 Express that has the AdventureWorksLT sample database attached to it. You can download the AdventureWorksLT database from the CodePlex Web site. For more information about attaching a database, see the following topics:

Creating a New Project

The first step is to create a Word add-in project.

To create a new project

  • Create a Word 2007 Add-in project with the name Populating Documents from a Database, using either Visual Basic or C#.

    For more information, see How to: Create Visual Studio Tools for Office Projects.

    Visual Studio opens the ThisAddIn.vb or ThisAddIn.cs file and adds the Populating Documents from a Database project to Solution Explorer.

Creating a Data Source

Use the Data Sources window to add a typed dataset to your project.

To add a typed dataset to the project

  1. On the Data menu, click Add New Data Source.

    The Data Source Configuration Wizard opens.

  2. Click Database, and then click Next.

  3. If you have an existing connection to the AdventureWorksLT database, choose this connection and click Next.

    Otherwise, click New Connection, and use the Add Connection dialog box to create the new connection. For more information, see How to: Create Connections to SQL Server Databases.

  4. In the Save the Connection String to the Application Configuration File page, click Next.

  5. In the Choose Your Database Objects page, expand Tables and select Customer (SalesLT).

  6. Click Finish.

    The AdventureWorksLTDataSet.xsd file is added to Solution Explorer. This file defines the following items:

    • A typed dataset named AdventureWorksLTDataSet. This dataset represents the contents of the Customer (SalesLT) table in the AdventureWorksLT database.

    • A TableAdapter named CustomerTableAdapter. This TableAdapter can be used to read and write data in the AdventureWorksLTDataSet. For more information, see TableAdapter Overview.

    You will use both of these objects later in this walkthrough.

Creating Controls and Binding Controls to Data

The interface for viewing database records in this walkthrough is very basic, and it is created right inside the document. One ContentControl displays a single database record at a time, and two Button controls enable you to scroll back and forth through the records. The content control uses a BindingSource to connect to the database.

For more information about binding controls to data, see Binding Data to Controls in Office Solutions.

To create the interface in the document

  1. In the ThisAddIn class, declare the following controls to display and scroll through the Customer table of the AdventureWorksLTDataSet database.

    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. In the ThisAddIn_Startup method, add the following code to initialize the dataset, fill the dataset with information from the AdventureWorksLTDataSet database.

    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. Add the following code to the ThisAddIn_Startup method. This generates a host item that extends the document. For more information, see Extending Word Documents and Excel Workbooks in Application-Level Add-ins at Run Time.

    Dim currentDocument As Word.Document = Me.Application.ActiveDocument
    Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
    Word.Document currentDocument = this.Application.ActiveDocument;
    Document extendedDocument = currentDocument.GetVstoObject();
    
  4. Define several ranges at the beginning of the document. These ranges identify where to insert text and place controls.

    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. Add the interface controls to the previously defined ranges.

    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. Bind the content control to AdventureWorksLTDataSet by using the BindingSource. For C# developers, add two event handlers for the Button controls.

    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. Add the following code to navigate through the database records.

    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();
    }
    

Testing the Add-In

When you open Word, the content control displays data from the AdventureWorksLTDataSet dataset. Scroll through the database records by clicking the Next and Previous buttons.

To test the add-in

  1. Press F5.

    A content control named customerContentControl is created and populated with data. At the same time, a dataset object named adventureWorksLTDataSet and a BindingSource named customerBindingSource are added to the project. The ContentControl is bound to the BindingSource, which in turn is bound to the dataset object.

  2. Click the Next and Previous buttons to scroll through the database records.

See Also

Tasks

How to: Populate Worksheets with Data from a Database

How to: Populate Documents with Data from a Database

How to: Populate Documents with Data from Services

How to: Populate Documents with Data from Objects

How to: Scroll Through Database Records in a Worksheet

How to: Update a Data Source with Data from a Host Control

Walkthrough: Simple Data Binding in a Document-Level Project

Walkthrough: Complex Data Binding in a Document-Level Project

How to: Populate Documents with Data from Objects

How to: Update a Data Source with Data from a Host Control

Concepts

Binding Data to Controls in Office Solutions

Using Local Database Files in Office Solutions Overview

Data Sources Overview

Displaying Data Overview

Using Local Database Files in Office Solutions Overview

Connecting to Data in Visual Studio Overview

Reference

BindingSource Component Overview

Other Resources

Data in Office Solutions

Change History

Date

History

Reason

July 2008

Added topic.

SP1 feature change.