演练:应用程序级项目中的简单数据绑定

更新: 2008 年 7 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 应用程序级项目

Microsoft Office 版本

  • Word 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

从 Visual Studio 2008 Service Pack 1 (SP1) 开始,您可以在应用程序级项目中将数据绑定到宿主控件和 Windows 窗体控件。本演练演示如何在运行时向 Microsoft Office Word 文档中添加控件并将控件绑定到数据。

本演练演示以下任务:

  • 在运行时向文档中添加 ContentControl 控件。

  • 创建用于将该控件连接到某个数据集实例的 BindingSource

  • 使用户可以滚动浏览记录以及在控件中查看记录。

Cc668208.alert_note(zh-cn,VS.90).gif说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

先决条件

您需要以下组件来完成本演练:

  • Visual Studio Tools for Office(Visual Studio 2008 专业版 和 Visual Studio Team System 的可选组件)。

    默认情况下,Visual Studio Tools for Office 随列出的 Visual Studio 版本一起安装。若要检查它是否已安装,请参见安装 Visual Studio Tools for Office

  • Word 2007。

  • 对附加了 AdventureWorksLT 示例数据库且正在运行的 SQL Server 2005 或 SQL Server 2005 Express 实例的访问权限。您可以从 CodePlex 网站下载 AdventureWorksLT 数据库。有关附加数据库的更多信息,请参见下列主题:

创建新项目

第一步是创建 Word 外接程序项目。

创建新项目

  • 使用 Visual Basic 或 C# 创建一个名为“从数据库填充文档”的“Word 2007 外接程序”项目。

    有关更多信息,请参见如何:创建 Visual Studio Tools for Office 项目

    Visual Studio 会打开 ThisAddIn.vb 或 ThisAddIn.cs 文件,并将“从数据库填充文档”项目添加到“解决方案资源管理器”中。

创建数据源

使用“数据源”窗口向您的项目中添加类型化数据集。

向项目中添加类型化数据集

  1. 在“数据”菜单上单击“添加新数据源”。

    “数据源配置向导”随即打开。

  2. 单击“数据库”,然后单击“下一步”。

  3. 如果已与 AdventureWorksLT 数据库建立连接,请选择此连接,然后单击“下一步”。

    否则,请单击“新建连接”,然后使用“添加连接”对话框创建新连接。有关更多信息,请参见如何:创建与 SQL Server 数据库的连接

  4. 在“将连接字符串保存到应用程序配置文件中”页中,单击“下一步”。

  5. 在“选择数据库对象”页中展开“表”,再选择“Customer (SalesLT)”。

  6. 单击“完成”。

    AdventureWorksLTDataSet.xsd 文件即会添加到“解决方案资源管理器”中。此文件定义以下项:

    • 一个名为 AdventureWorksLTDataSet 的类型化数据集。此数据集表示 AdventureWorksLT 数据库中的“Customer (SalesLT)”表的内容。

    • 一个名为 CustomerTableAdapter 的 TableAdapter。此 TableAdapter 可用来在 AdventureWorksLTDataSet 中读取和写入数据。有关更多信息,请参见 TableAdapter 概述

    在本演练后面的部分中,您将使用这两个对象。

创建控件并将控件绑定到数据

在本演练中,用于查看数据库记录的界面非常简单,它是直接在文档内部创建的。一个 ContentControl 一次显示一条数据库记录,两个 Button 控件允许您以前后滚动的方式查看记录。该内容控件使用 BindingSource 来连接到数据库。

有关将控件绑定到数据的更多信息,请参见将数据绑定到控件

在文档中创建界面

  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
    Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
    Word.Document currentDocument = this.Application.ActiveDocument;
    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 控件添加两个事件处理程序。

    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 也随即添加到项目中。ContentControl 绑定到 BindingSource,而后者又绑定到该数据集对象。

  2. 单击“下一条”和“上一条”按钮来滚动查看数据库记录。

请参见

任务

如何:用数据库中的数据填充工作表

如何:用数据库中的数据填充文档

如何:用服务中的数据填充文档

如何:用对象中的数据填充文档

如何:在工作表中滚动查看数据库记录

如何:使用宿主控件中的数据更新数据源

演练:文档级项目中的简单数据绑定

演练:文档级项目中的复杂数据绑定

如何:用对象中的数据填充文档

如何:使用宿主控件中的数据更新数据源

概念

将数据绑定到控件

在 Office 解决方案中使用本地数据库文件概述

数据源概述

“显示数据”概述

在 Office 解决方案中使用本地数据库文件概述

“连接到 Visual Studio 中的数据”概述

参考

BindingSource 组件概述

其他资源

Office 解决方案中的数据

修订记录

日期

修订历史记录

原因

2008 年 7 月

新增主题。

SP1 功能更改。