演练:应用程序级项目中的简单数据绑定
可以将数据绑定到应用程序级项目中的宿主控件和 Windows 窗体控件。本演练演示如何在运行时向 Microsoft Office Word 文档中添加控件并将控件绑定到数据。
**适用于:**本主题中的信息适用于 Word 2013 和 Word 2010 的应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
本演练阐释了以下任务:
在运行时向文档中添加 ContentControl 控件。
创建用于将该控件连接到某个数据集实例的 BindingSource。
使用户可以滚动浏览记录以及在控件中查看记录。
说明 |
---|
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。 |
系统必备
您需要以下组件来完成本演练:
-
Visual Studio 2012 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.110\).md)。
Word 2013 或 Word 2010。
对附加了 AdventureWorksLT 示例数据库且正在运行的 SQL Server 2005 或 SQL Server 2005 Express 实例的访问权限。您可以从 CodePlex 网站下载 AdventureWorksLT 数据库。有关附加数据库的更多信息,请参见下列主题:
若要使用 SQL Server Management Studio 或 SQL Server Management Studio Express 来附加数据库,请参见如何:附加数据库 (SQL Server Management Studio)。
若要使用命令行来附加数据库,请参见如何:将数据库文件附加到 SQL Server Express。
创建新项目
第一步是创建 Word 外接程序项目。
创建新项目
使用 Visual Basic 或 C# 创建一个名为“从数据库填充文档”的 Word 外接程序项目。
有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
Visual Studio 会打开 ThisAddIn.vb 或 ThisAddIn.cs 文件,并将“从数据库填充文档”项目添加到**“解决方案资源管理器”**中。
如果项目面向 .NET Framework 4 或 .NET Framework 4.5,添加对 Microsoft.Office.Tools.Word.v4.0.Utilities.dll 程序集。在本演练后面的部分中,需要此引用才能以编程方式向文档中添加 Windows 窗体控件。
创建数据源
使用**“数据源”**窗口向您的项目中添加类型化数据集。
向项目中添加类型化数据集
如果 数据源 窗口不可见,则显示那么,在菜单栏上,选择 查看,其他窗口,数据源。
选择 添加新数据源 开始 数据源配置向导。
单击**“数据库”,然后单击“下一步”**。
如果已与 AdventureWorksLT 数据库建立连接,请选择此连接,然后单击**“下一步”**。
否则,单击**“新建连接”,然后使用“添加连接”**对话框创建新连接。有关更多信息,请参见如何:连接到数据库中的数据。
在**“将连接字符串保存到应用程序配置文件中”页中,单击“下一步”**。
在**“选择数据库对象”页中展开“表”,再选择“Customer (SalesLT)”**。
单击“完成”。
AdventureWorksLTDataSet.xsd 文件即会添加到**“解决方案资源管理器”**中。此文件定义以下各项:
一个名为 AdventureWorksLTDataSet 的类型化数据集。此数据集表示 AdventureWorksLT 数据库中的**“Customer (SalesLT)”**表的内容。
一个名为 CustomerTableAdapter 的 TableAdapter。此 TableAdapter 可用来在 AdventureWorksLTDataSet 中读取和写入数据。有关更多信息,请参见TableAdapter 概述。
在本演练后面的部分中,您将使用这两个对象。
创建控件并将控件绑定到数据
在本演练中,用于查看数据库记录的界面非常简单,它是直接在文档内部创建的。一个 ContentControl 一次显示一条数据库记录,两个 Button 控件允许您以前后滚动的方式查看记录。该内容控件使用 BindingSource 来连接到数据库。
有关将控件绑定到数据的更多信息,请参见将数据绑定到 Office 解决方案中的控件。
在文档中创建界面
在 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;
在 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();
将以下代码添加到 ThisAddIn_Startup 方法中。这会生成一个扩展文档的宿主项。有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿。
Dim currentDocument As Word.Document = Me.Application.ActiveDocument Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
Word.Document currentDocument = this.Application.ActiveDocument; Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
在文档开始处定义多个范围。这些范围标识用于插入文本和放置控件的位置。
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;
将界面控件添加到前面定义的范围内。
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");
使用 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);
添加下面的代码,以浏览数据库记录。
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 数据集中的数据。通过单击**“下一条”和“上一条”**按钮来滚动查看数据库记录。
测试外接程序
按 F5。
即会创建一个名为 customerContentControl 的内容控件,并向该控件填充数据。同时,一个名为 adventureWorksLTDataSet 的数据集对象和一个名为 customerBindingSource 的 BindingSource 也随即添加到项目中。ContentControl 绑定到 BindingSource,而后者又绑定到该数据集对象。
单击**“下一条”和“上一条”**按钮来滚动查看数据库记录。
请参见
任务
参考
概念
在 Visual Studio 中将 Windows 窗体控件绑定到数据