使用主机控件中的数据更新数据源

可以将宿主控件绑定到数据源,然后使用在此控件中对数据所做的更改来更新该数据源。 此过程包括以下两个主要步骤:

  1. 使用控件中的已修改数据更新内存中数据源。 通常情况下,内存中数据源是一个 DataSetDataTable或某个其他数据对象。

  2. 使用内存中数据源中的已更改数据更新数据库。 此步骤仅适用于数据源连接到后端数据库(例如 SQL Server 或 Microsoft Office Access 数据库)的情况。

    有关主机控件和数据绑定的详细信息,请参阅主机项和数据绑定概述,并将数据绑定到办公室解决方案中的控件。

    适用于: 本主题中的信息适用于 Excel 和 Word 的文档级项目和 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

更新内存中数据源

默认情况下,支持简单数据绑定的宿主控件(例如 Word 文档中的内容控件或 Excel 工作表中的命名范围控件)不将数据更改保存到内存中数据源。 也就是说,如果最终用户更改宿主控件中的某个值后离开此控件,则该控件中的这个新值并不会自动保存到数据源中。

若要将数据保存到数据源,可以编写更新数据源的代码以响应运行时的某个特定事件,或者可以将控件配置为当控件中的值更改时自动更新数据源。

无需将 ListObject 更改保存到内存中数据源。 如果将 ListObject 控件绑定到数据,则 ListObject 控件会自动将更改保存到内存中数据源,而无需借助其他代码。

在运行时更新内存中数据源

  • 调用将控件绑定到数据源的 WriteValue 对象的 Binding 方法。

    下面的示例将在 Excel 工作表中对 NamedRange 控件所做的更改保存到数据源。 此示例假定你有一个名为 NamedRangenamedRange1 控件,且其 Value2 属性已绑定到数据源中的一个字段。

    this.namedRange1.DataBindings["Value2"].WriteValue();
    

自动更新内存中数据源

你可也可以配置控件,使其自动更新内存中数据源。 在文档级项目中,可以通过使用代码或设计器来实现。 在 VSTO 外接程序项目中,必须使用代码。

通过使用代码将控件设置为自动更新内存中数据源

  1. 使用将控件绑定到数据源的对象的 Binding System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged 模式。 有两个选项可用于更新数据源:

    • 若要在验证控件时更新数据源,请将此属性设置为 System.Windows.Forms.DataSourceUpdateMode.OnValidation。

    • 若要在控件的数据绑定属性的值发生更改时更新数据源,请将此属性设置为 System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged。

      注意

      System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged 选项不适用于 Word 主机控件,因为 Word 不提供文档更改或控件更改通知。 但是,此选项可用于 Word 文档中的 Windows 窗体控件。

      下面的示例将 NamedRange 控件配置为当该控件中的值更改时自动更新数据源。 此示例假定你有一个名为 NamedRangenamedRange1 控件,且其 Value2 属性已绑定到数据源中的一个字段。

      this.namedRange1.DataBindings["Value2"].DataSourceUpdateMode = 
          DataSourceUpdateMode.OnPropertyChanged;
      

通过使用设计器将控件设置为自动更新内存中数据源

  1. 在 Visual Studio 的设计器中,打开 Word 文档或 Excel 工作簿。

  2. 单击希望其自动更新数据源的控件。

  3. 在“属性” 窗口中,展开“(DataBindings)” 属性。

  4. 在“(Advanced)” 属性旁边,单击省略号按钮 (VisualStudioEllipsesButton screenshot)。

  5. 在“格式设置和高级绑定” 对话框中,单击“数据源更新模式” 下拉列表并选择以下值之一:

    • 若要在验证控件时更新数据源,请选择“OnValidation”

    • 若要在控件的数据绑定属性值更改时更新数据源,请选择“OnPropertyChanged”

      注意

      因为 Word 不提供文档更改或控件更改通知,所以“OnPropertyChanged” 选项不适用于 Word 宿主控件。 但是,此选项可用于 Word 文档中的 Windows 窗体控件。

  6. 关闭“格式设置和高级绑定” 对话框。

更新数据库

如果内存中数据源与某个数据库关联,则必须使用对该数据源所做的更改来更新此数据库。 有关更新数据库的详细信息,请参阅使用 TableAdapter 将数据保存回数据库并更新数据。

更新数据库

  1. 调用控件的 EndEditBindingSource 方法。

    在设计时将数据绑定控件添加到文档或工作簿时,会自动生成 BindingSourceBindingSource 将该控件连接到项目中的类型化数据集。 有关详细信息,请参阅 BindingSource 组件概述

    下面的代码示例假定你的项目包含一个名为 BindingSourcecustomersBindingSource

    this.customersBindingSource.EndEdit();
    
  2. Update 项目中调用生成的 TableAdapter 的方法。

    在设计时向文档或工作簿添加数据绑定控件时,自动生成 TableAdapter。 TableAdapter 将项目中的类型化数据集连接到数据库。 有关详细信息,请参阅 TableAdapter 概述

    下面的代码示例假定你已连接到 Northwind 数据库中的 Customers 表,并且项目包含名为 TableAdapter 的 customersTableAdapter TableAdapter 和一个名为 northwindDataSet类型化的数据集。

    this.customersTableAdapter.Update(this.northwindDataSet.Customers);