演练:将数据绑定到 Excel 操作窗格上的控件
此演练演示如何在 Microsoft Office Excel 中将数据绑定到操作窗格上的控件。 这些控件演示 SQL Server 数据库中的表之间的主/从关系。
**适用于:**本主题中的信息适用于 Excel 2007 和 Excel 2010 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
本演练阐释了以下任务:
将控件添加到工作表中。
创建操作窗格控件。
将数据绑定 Windows 窗体控件添加到操作窗格控件。
打开应用程序时显示操作窗格。
提示
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置。
系统必备
您需要以下组件来完成本演练:
-
Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
Excel 2007 或 Excel 2010。
访问带有 Northwind SQL Server 示例数据库的服务器。
从 SQL Server 数据库中读取数据和向其中写入数据的权限。
创建项目
第一步是要创建一个 Excel 工作簿项目。
创建新项目
创建一个 Excel 工作簿项目,并将其命名为“我的 Excel 操作窗格”。 在向导中,选择**“创建新文档”**。 有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
Visual Studio 在设计器中打开新的 Excel 工作簿并将**“我的 Excel 操作窗格”项目添加到“解决方案资源管理器”**中。
向项目中添加新的数据源
向项目中添加新的数据源
如果**“数据源”窗口不可见,请单击“数据”菜单上的“显示数据源”**。
提示
如果“显示数据源”不可用,则请在 Excel 工作表内部单击,然后再次进行检查。
单击**“添加新数据源”以启动“数据源配置向导”**。
选择**“数据库”,然后单击“下一步”**。
选择到 Northwind 示例 SQL Server 数据库的数据连接,或者使用**“新建连接”**按钮添加新连接。
单击**“下一步”**。
如果选择了该选项,请将其清除以保存连接,然后单击**“下一步”**。
展开**“数据库对象”窗口中的“表”**节点。
选择**“Suppliers”**表旁边的复选框。
展开**“Products”表,并选择“ProductName”、“SupplierID”、“QuantityPerUnit”和“UnitPrice”**。
单击**“完成”**。
向导将**“Suppliers”表和“Products”表添加到“数据源”窗口中。 还将一个类型化数据集添加到在“解决方案资源管理器”**中可见的项目中。
将控件添加到工作表
接下来,将 NamedRange 控件和 ListObject 控件添加到第一个工作表中。
添加 NamedRange 控件和 ListObject 控件
验证**“My Excel Actions Pane.xls”**工作簿在 Visual Studio 设计器中是否已打开,并且其中是否显示 Sheet1。
在**“数据源”窗口中展开“Suppliers”**表。
在**“Company Name”节点上单击下拉箭头,然后单击“NamedRange”**。
将**“Company Name”从“数据源”窗口拖到 Sheet1 中的“A2”**单元格中。
将创建一个名为 CompanyNameNamedRange 的 NamedRange 控件,并在**“A2”**单元格中出现文本 <CompanyName>。 同时,会将一个名为 suppliersBindingSource 的 BindingSource、一个表适配器和一个 DataSet 添加到该项目中。 该控件绑定到 BindingSource,接着后者绑定到 DataSet 实例。
在**“数据源”窗口中,向下滚动通过“Suppliers”表下的列。 该列表的下面是“Products”表;它之所以位于此处是因为它是“Suppliers”表的子表。 选择此“Products”表(不是与“Suppliers”**表位于同一层的那个),然后单击出现的下拉箭头。
单击下拉列表中的**“ListObject”,然后将“Products”表拖到 Sheet1 的“A6”**单元格中。
这将在**“A6”**单元格中创建一个名为 ProductNameListObject 的 ListObject 控件。 同时,会将一个名为 productsBindingSource 的 BindingSource 和一个表适配器添加到该项目中。 该控件绑定到 BindingSource,接着后者绑定到 DataSet 实例。
仅对 C# 来说,选择组件栏上的**“suppliersBindingSource”,然后在“属性”窗口中将“Modifiers”**属性更改为“Internal”。
向操作窗格中添加控件
然后,您需要一个包含组合框的操作窗格控件。
添加操作窗格控件
在**“解决方案资源浏览器”中选择“我的 Excel 操作窗格”**。
在**“项目”菜单上,单击“添加新项”**。
在**“添加新项”对话框中选择“操作窗格控件”,将其命名为 ActionsControl,然后单击“添加”**。
将数据绑定 Windows 窗体控件添加到操作窗格控件
将 ComboBox 控件从**“工具箱”的“公共控件”**选项卡拖动到操作窗格控件。
将**“Size”**属性更改为“171, 21”。
调整用户控件的大小,使其适合组合框。
将操作窗格上的控件绑定到数据
在本节中,要将 ComboBox 的数据源设置为与工作表上的 NamedRange 控件相同的数据源。
设置控件的数据绑定属性
右击操作窗格控件,然后单击**“查看代码”**。
将以下代码添加到操作窗格控件的 Load 事件中。
Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load Me.ComboBox1.DataSource = Globals.Sheet1.SuppliersBindingSource Me.ComboBox1.DisplayMember = "CompanyName" End Sub
private void ActionsControl_Load(object sender, EventArgs e) { this.comboBox1.DataSource = Globals.Sheet1.suppliersBindingSource; this.comboBox1.DisplayMember = "CompanyName"; }
在 C# 中,必须为 ActionsControl 创建事件处理程序。 可以将此代码放在 ActionsControl 构造函数中。 有关创建事件处理程序的更多信息,请参见 如何:在 Office 项目中创建事件处理程序。
public ActionsControl() { InitializeComponent(); this.Load += new EventHandler(ActionsControl_Load); }
显示操作窗格
操作窗格将不可见,直至您在运行时添加控件为止。
显示操作窗格
在**“解决方案资源管理器”中,右击 ThisWorkbook.vb 或 ThisWorkbook.cs,然后单击“查看代码”**。
在 ThisWorkbook 类中创建用户控件的新实例。
Dim actions As New ActionsControl
ActionsControl actions = new ActionsControl();
在 ThisWorkbook 的 Startup 事件处理程序中,将控件添加到操作窗格。
Private Sub ThisWorkbook_Startup(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Startup Me.ActionsPane.Controls.Add(actions) End Sub
private void ThisWorkbook_Startup(object sender, System.EventArgs e) { this.ActionsPane.Controls.Add(actions); }
测试应用程序
现在可以对文档进行测试,以验证当文档打开时操作窗格是否打开,以及控件是否具有主/从关系。
测试文档
按 F5 运行项目。
确认操作窗格可见。
在列表框中选择一个公司。 验证 NamedRange 控件中是否列出了公司名称,并验证 ListObject 控件中是否列出了产品详细信息。
选择不同的公司以验证是否对公司名称和产品详细信息进行了适当的更改。
后续步骤
以下是接下来可能要执行的一些任务:
将数据绑定到 Word 中的控件。 有关更多信息,请参见演练:将数据绑定到“Word 操作”窗格上的控件。
显示和隐藏操作窗格上的控件。 有关更多信息,请参见演练:根据用户上下文更改操作窗格。
部署项目。 有关更多信息,请参见部署概述(Visual Studio 中的 Office 开发)。