演练:应用程序级项目中的复杂数据绑定
更新: 2008 年 7 月
适用于 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型
Microsoft Office 版本
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
从 Visual Studio 2008 Service Pack 1 (SP1) 开始,您可以在应用程序级项目中将数据绑定到宿主控件和 Windows 窗体控件。本演练演示如何在运行时向 Microsoft Office Excel 工作表中添加控件并将控件绑定到数据。
本演练演示以下任务:
在运行时将 ListObject 控件添加到工作表中。
创建用于将该控件连接到某个数据集实例的 BindingSource。
说明: |
---|
对于在以下说明中使用的某些 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。
Excel 2007。
对附加了 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。
创建新项目
第一步是创建一个 Excel 外接程序项目。
创建新项目
使用 Visual Basic 或 C# 创建一个名为“基于数据库填充工作表”的“Excel 2007 外接程序”项目。
有关更多信息,请参见如何:创建 Visual Studio Tools for Office 项目。
Visual Studio 会打开 ThisAddIn.vb 或 ThisAddIn.cs 文件,并将“基于数据库填充工作表”项目添加到“解决方案资源管理器”中。
创建数据源
使用“数据源”窗口向您的项目中添加类型化数据集。
向项目中添加类型化数据集
在“数据”菜单上单击“添加新数据源”。
“数据源配置向导”随即打开。
单击“数据库”,然后单击“下一步”。
如果已与 AdventureWorksLT 数据库建立连接,请选择此连接,然后单击“下一步”。
否则,请单击“新建连接”,然后使用“添加连接”对话框创建新连接。有关更多信息,请参见如何:创建与 SQL Server 数据库的连接。
在“将连接字符串保存到应用程序配置文件中”页中,单击“下一步”。
在“选择数据库对象”页中,展开“表”,然后选择“Address (SalesLT)”。
单击“完成”。
AdventureWorksLTDataSet.xsd 文件即会添加到“解决方案资源管理器”中。此文件定义以下各项:
一个名为 AdventureWorksLTDataSet 的类型化数据集。此数据集表示 AdventureWorksLT 数据库中的“Address (SalesLT)”表的内容。
一个名为 AddressTableAdapter 的 TableAdapter。此 TableAdapter 可用来在 AdventureWorksLTDataSet 中读取和写入数据。有关更多信息,请参见 TableAdapter 概述。
在本演练后面的部分中,您将使用这两个对象。
创建控件并将控件绑定到数据
对于本演练,用户一打开工作簿,ListObject 控件就会显示选定表中的所有数据。列表对象使用 BindingSource 将该控件连接到数据库。
有关将控件绑定到数据的更多信息,请参见将数据绑定到控件。
添加列表对象、数据集和表适配器
在 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;
在 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();
将以下代码添加到 ThisAddIn_Startup 方法中。这会生成一个扩展工作表的宿主项。有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿。
Dim worksheet As Excel.Worksheet = DirectCast(Me.Application.ActiveWorkbook.Worksheets(1), Excel.Worksheet) Dim extendedWorksheet As Worksheet = worksheet.GetVstoObject()
Excel.Worksheet worksheet = (Excel.Worksheet)this.Application.ActiveWorkbook.Worksheets[1]; Worksheet extendedWorksheet = worksheet.GetVstoObject();
创建一个范围并添加 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");
使用 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 添加到项目中。此 ListObject 绑定到 BindingSource,而后者又绑定到此数据集对象。
请参见
任务
概念
参考
其他资源
修订记录
日期 |
修订历史记录 |
原因 |
---|---|---|
2008 年 7 月 |
新增主题。 |
SP1 功能更改。 |