如何:使用宿主控件中的数据更新数据源
可以将宿主控件绑定到数据源,然后使用在此控件中对数据所做的更改来更新该数据源。此过程包括以下两个主要步骤:
使用控件中的已修改数据更新内存中数据源。通常,内存中数据源是一个 DataSet、DataTable 或某个其他数据对象。
使用内存中数据源中的已更改数据更新数据库。此步骤仅适用于数据源连接到后端数据库(例如 SQL Server 或 Microsoft Office Access 数据库)的情况。
有关宿主控件和数据绑定的更多信息,请参见宿主项和宿主控件概述和将数据绑定到 Office 解决方案中的控件。
**适用于:**本主题中的信息适用于以下应用程序的文档级项目和应用程序级项目:Excel 2013 和 Excel 2010;Word 2013 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
更新内存中数据源
默认情况下,支持简单数据绑定的宿主控件(例如 Word 文档中的内容控件或 Excel 工作表中的命名范围控件)不将数据更改保存到内存中数据源。也就是说,如果最终用户更改宿主控件中的某个值后离开此控件,则该控件中的这个新值并不自动保存到数据源中。
若要将数据保存到数据源,可以编写代码来更新数据源以响应运行时的某个特定事件,或者可以将控件配置为当控件中的值更改时自动更新数据源。
无需将 ListObject 更改保存到内存中数据源。如果将 ListObject 控件绑定到数据,则 ListObject 控件会自动将更改保存到内存中数据源,而无需借助其他代码。
在运行时更新内存中数据源
调用将控件绑定到数据源的 Binding 对象的 WriteValue 方法。
下面的示例将在 Excel 工作表中对 NamedRange 控件所做的更改保存到数据源。此示例假定您有一个名为 namedRange1 的 NamedRange 控件,其 Value2 属性已绑定到数据源中的一个字段。
Me.NamedRange1.DataBindings("Value2").WriteValue()
this.namedRange1.DataBindings["Value2"].WriteValue();
自动更新内存中数据源
也可以配置控件,使其自动更新内存中数据源。在文档级项目中,可以通过使用代码或设计器来实现,而在应用程序级项目中,则必须使用代码来实现。
通过使用代码将控件设置为自动更新内存中数据源
使用将控件绑定到数据源的 Binding 对象的 System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged 模式。有两个选项可用于更新数据源:
若要在验证控件时更新数据源,请将此属性设置为 System.Windows.Forms.DataSourceUpdateMode.OnValidation。
若要在控件的数据绑定属性值更改时更新数据源,请将此属性设置为 System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged。
说明 由于 Word 不提供文档更改或控件更改通知,因此 System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged 选项不适用于 Word 宿主控件,但该选项可用于 Word 文档中的 Windows 窗体控件。
下面的示例将 NamedRange 控件配置为当该控件中的值更改时自动更新数据源。此示例假定您有一个名为 namedRange1 的 NamedRange 控件,其 Value2 属性已绑定到数据源中的一个字段。
Me.NamedRange1.DataBindings("Value2").DataSourceUpdateMode = _ DataSourceUpdateMode.OnPropertyChanged
this.namedRange1.DataBindings["Value2"].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
通过使用设计器将控件设置为自动更新内存中数据源
在 Visual Studio 的设计器中,打开 Word 文档或 Excel 工作簿。
单击希望其自动更新数据源的控件。
在**“属性”窗口中,展开“(DataBindings)”**属性。
在**“(Advanced)”**属性旁边,单击省略号按钮 ()。
在**“格式设置和高级绑定”对话框中,单击“数据源更新模式”**下拉列表并选择以下值之一:
若要在验证控件时更新数据源,请选择**“OnValidation”**。
若要在控件的数据绑定属性值更改时更新数据源,请选择**“OnPropertyChanged”**。
说明 由于 Word 不提供文档更改或控件更改通知,因此“OnPropertyChanged”选项不适用于 Word 宿主控件,但该选项可用于 Word 文档中的 Windows 窗体控件。
关闭**“格式设置和高级绑定”**对话框。
更新数据库
如果内存中数据源与某个数据库关联,则必须使用对该数据源所做的更改来更新此数据库。有关更新数据库的更多信息,请参见将数据保存在数据集中和如何:使用 TableAdapter 更新数据。
更新数据库
调用控件的 BindingSource 的 EndEdit 方法。
在设计时将数据绑定控件添加到文档或工作簿时,会自动生成 BindingSource,BindingSource 将该控件连接到项目中的类型化数据集。有关更多信息,请参见BindingSource 组件概述。
下面的代码示例假定您的项目包含一个名为 customersBindingSource 的 BindingSource。
Me.CustomersBindingSource.EndEdit()
this.customersBindingSource.EndEdit();
调用在项目中生成的 TableAdapter 的 Update 方法。
在设计时将数据绑定控件添加到文档或工作簿时,会自动生成 TableAdapter,TableAdapter 将项目中的类型化数据集连接到数据库。有关更多信息,请参见TableAdapter 概述。
下面的代码示例假定您具有与 Northwind 数据库中的 Customers 表的连接,并且您的项目包含一个名为 customersTableAdapter 的 TableAdapter 和一个名为 northwindDataSet 的类型化数据集。
Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
this.customersTableAdapter.Update(this.northwindDataSet.Customers);