演练:将数据绑定到 Word 操作窗格上的控件
本演练演示了将数据绑定到 Word 中操作窗格上的控件的数据绑定。 控件演示 SQL Server 数据库中表之间的主/从关系。
适用于: 本主题中的信息适用于 Word 的文档级项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。
本演练阐释了以下任务:
使用绑定到数据的Windows 窗体控件创建操作窗格。
使用 master/detail 关系在控件中显示数据。
在应用程序打开时显示操作窗格。
注意
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 Visual Studio IDE。
先决条件
你需要满足以下条件才能完成本演练:
Visual Studio 的一个版本,其中包含 Microsoft Office 开发人员工具。 有关详细信息,请参阅配置计算机以开发办公室解决方案。
Word 2013 或 Word 2010。
使用 Northwind SQL Server 示例数据库访问服务器。
读取和写入 SQL Server 数据库的权限。
创建项目
第一步是创建 Word 文档项目。
创建新项目
创建名为 “我的 Word 操作”窗格的 Word 文档项目。 在向导中,选择“ 创建新文档”。
有关详细信息,请参阅“如何:在 Visual Studio 中创建办公室项目。
Visual Studio 将在设计器中打开新的 Word 文档,并将“我的 Word 操作窗格”项目添加到解决方案资源管理器。
将控件添加到操作窗格
对于本演练,需要包含数据绑定Windows 窗体控件的操作窗格控件。 将数据源添加到项目,然后将控件从 “数据源 ”窗口拖动到操作窗格控件。
添加操作窗格控件
在解决方案资源管理器中选择“我的 Word 操作窗格”项目。
在 “项目” 菜单上,单击 “添加新项”。
在 “添加新项 ”对话框中,选择“ 操作窗格控件”,将其命名为 ActionsControl,然后单击“ 添加”。
向项目添加数据源
如果“数据源”窗口不可见,请通过菜单栏选择“查看>其他 Windows>数据源”来显示它。
注意
如果“显示数据源”不可用,请单击 Word 文档,然后再次检查。
单击“ 添加新数据源 ”以启动 数据源配置向导。
选择“ 数据库 ”,然后单击“ 下一步”。
选择与 Northwind 示例 SQL Server 数据库的数据连接,或使用“新建连接”按钮添加新连接。
单击“下一步”。
清除选中连接时保存连接的选项,然后单击“ 下一步”。
展开“数据库对象”窗口中的“表”节点。
选择“供应商和产品”表旁边的检查框。
单击“完成” 。
向导将 “供应商 ”表和 “产品 ”表添加到 “数据源 ”窗口。 它还将类型化数据集添加到解决方案资源管理器中可见的项目。
向操作窗格控件添加数据绑定Windows 窗体控件
在“数据源”窗口中,展开“供应商”表。
单击公司名称节点上的下拉箭头,然后选择“ComboBox”。
将 CompanyName 从“数据源”窗口拖到操作窗格控件。
在操作窗格控件上创建控件 ComboBox 。 同时,命名BindingSource
SuppliersBindingSource
表适配器和表DataSet适配器将添加到组件托盘中的项目。在
SuppliersBindingNavigator
组件托盘中选择,然后按 Delete。 不会在本演练中使用SuppliersBindingNavigator
。注意
删除不会
SuppliersBindingNavigator
删除为其生成的所有代码。 可以删除此代码。移动组合框,使其位于标签下,并将 Size 属性更改为 171,21。
在“数据源”窗口中,展开“产品”表,即“供应商”表的子级。
单击 ProductName 节点上的下拉箭头,然后选择 ListBox。
将 ProductName 拖到操作窗格控件。
在操作窗格控件上创建控件 ListBox 。 同时, BindingSource 命名
ProductBindingSource
适配器和表适配器将添加到组件托盘中的项目。移动列表框,使其位于标签下,并将 Size 属性更改为 171,95。
将一个Button从工具箱拖到操作窗格控件上,并将其放在列表框下方。
右键单击快捷菜单上的Button“属性”,然后更改以下属性。
属性 值 Name 插入 文本 插入 调整用户控件的大小以适应控件。
设置数据源
若要设置数据源,请将代码添加到 Load 操作窗格控件的事件,以使用控件 DataTable中的数据填充控件,并设置每个控件的 DataSource 和 DataMember 属性。
使用数据加载控件
在 Load 类的
ActionsControl
事件处理程序中,添加以下代码。在 C# 中,必须将事件处理程序附加到事件 Load 。 调用后,可以将此代码
ActionsControl
置于构造函数中InitializeComponent
。 有关如何创建事件处理程序的详细信息,请参阅如何:在办公室项目中创建事件处理程序。this.Load += new EventHandler(ActionsControl_Load);
设置控件的数据绑定属性
选择
CompanyNameComboBox
控件。在“属性”窗口中,单击 DataSource 属性右侧的按钮,然后选择 suppliersBindingSource。
单击 DisplayMember 属性右侧的按钮,然后选择 CompanyName。
展开 DataBindings 属性,单击 Text 属性右侧的按钮,然后选择“无”。
选择
ProductNameListBox
控件。在“属性”窗口中,单击 DataSource 属性右侧的按钮,然后选择 productsBindingSource。
单击 DisplayMember 属性右侧的按钮,然后选择 ProductName。
展开 DataBindings 属性,单击 SelectedValue 属性右侧的按钮,然后选择“无”。
添加用于将数据插入表中的方法
下一个任务是从绑定控件读取数据,并在 Word 文档中填充表格。 首先,创建用于设置表格中标题格式的过程,然后添加 AddData
用于创建和设置 Word 表格格式的方法。
设置表标题的格式
在类中
ActionsControl
,创建一个设置表标题格式的方法。
创建表
在类中
ActionsControl
,编写一个方法,该方法将创建一个表(如果尚不存在),并将操作窗格中的数据添加到表中。private void AddData(System.Data.DataRow row, string companyName) { object missing = System.Type.Missing; // Create a table if it doesn't already exist. if (Globals.ThisDocument.Tables.Count == 0) { try { // Create a table. Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing); // Insert headings. SetHeadings(tbl.Cell(1, 1), "Company Name"); SetHeadings(tbl.Cell(1, 2), "Product Name"); SetHeadings(tbl.Cell(1, 3), "Quantity"); SetHeadings(tbl.Cell(1, 4), "Unit Price"); } catch (Exception ex) { MessageBox.Show("Problem creating Products table: " + ex.Message, "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // Add data from data row to the table. Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection; if (selection.Tables.Count > 0) { Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing); newRow.Range.Font.Bold = 0; newRow.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft; newRow.Cells[4].Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight; newRow.Cells[1].Range.Text = companyName; newRow.Cells[2].Range.Text = row["ProductName"].ToString(); newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString(); newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00"); } else { MessageBox.Show("Cursor must be within a table.", "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
在 Word 表格中插入文本
将以下代码添加到Click“插入”按钮的事件处理程序。
private void Insert_Click(object sender, System.EventArgs e) { System.Data.DataTable tbl = northwindDataSet.Products; System.Data.DataRow[] rows; // Check if a product is selected. if (this.productNameListBox.SelectedIndex >= 0) { System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem; string product = productRow.Row["ProductName"].ToString(); string company = this.companyNameComboBox.Text; // Return the data row from the selected product. rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'"); this.AddData(rows[0], company); } else { MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK); } }
在 C# 中,必须为按钮的事件创建事件处理程序 Click 。 可以将此代码 Load 置于类的事件处理程序中
ActionsControl
。this.Insert.Click += new EventHandler(Insert_Click);
显示操作窗格
将控件添加到其中后,操作窗格将变为可见。
显示操作窗格
在解决方案资源管理器中,右键单击 ThisDocument.vb 或 ThisDocument.cs,然后单击快捷菜单上的“查看代码”。
在类顶部
ThisDocument
创建控件的新实例,使其如以下示例所示。将代码添加到 Startup 事件处理程序
ThisDocument
,使其如以下示例所示。
测试应用程序
现在,可以测试文档,以验证文档打开时是否显示操作窗格。 在操作窗格中的控件中测试主/详细信息关系,并确保单击“插入”按钮时在 Word 表中填充数据。
测试文档
按 F5 运行项目。
确认操作窗格可见。
在组合框中选择一家公司,并验证“产品”列表框中的项目是否发生更改。
选择产品,单击“操作”窗格上的“插入”,并验证产品详细信息是否已添加到 Word 中的表中。
插入来自各种公司的附加产品。
后续步骤
本演练演示了将数据绑定到 Word 中操作窗格上的控件的基础知识。 以下是接下来可能要执行的一些任务:
将数据绑定到 Excel 中的控件。 有关详细信息,请参阅 演练:将数据绑定到 Excel 操作窗格上的控件。
部署项目。 有关详细信息,请参阅使用 ClickOnce 部署办公室解决方案。