将 Windows 窗体控件绑定到 .NET Framework 应用程序中的数据

注意

数据集和相关类是 2000 年代初的旧 .NET Framework 技术,使应用程序能够在应用程序与数据库断开连接时处理内存中的数据。 它们对于使用户能够修改数据并持续更改回数据库的应用程序特别有用。 虽然数据集已被证明是一项非常成功的技术,但我们建议新的 .NET 应用程序使用 Entity Framework Core。 实体框架提供了一种更自然的方式来将表格数据作为对象模型,并且具有更简单的编程接口。

可通过将数据绑定到 Windows 窗体向应用程序的用户显示数据。 若要创建这些数据绑定的控件,请将项从“数据源”窗口拖动到 Visual Studio 中的 Windows 窗体设计器上。

Data Source drag operation

提示

如果未显示“数据源”窗口,可通过选择“查看”>“其他窗口”>“数据源”,或者通过按 Shift+Alt+D 将其打开 。 必须在 Visual Studio 中打开一个项目才会显示“数据源”窗口。

在拖动项之前,你可设置要绑定到的控件类型。 所显示的值将不同,具体取决于是选择表本身还是单个列。 还可设置自定义值。 表的“详细信息”表示每个列都绑定到单独的控件。

Bind data source to DataGridView

BindingSource 和 BindingNavigator 控件

BindingSource 组件有两个用途。 第一,在它将控件绑定到数据时提供抽象层。 窗体上的控件会绑定到 BindingSource 组件,而不是直接绑定到数据源。 第二,它可以管理对象的集合。 向 BindingSource 添加一个类型来创建该类型的列表。

有关 BindingSource 组件的详细信息,请参阅:

BindingNavigator 控件提供了一个用户界面,用于导航 Windows 应用程序显示的数据。

绑定到 DataGridView 控件中的数据

对于 DataGridView 控件,整个表将绑定到这一个控件。 将“DataGridView”拖动到窗体时,还会显示用于导航记录 (BindingNavigator) 的工具条。 组件栏中将显示 DataSetTableAdapterBindingSourceBindingNavigator。 下图中还添加了一个 TableAdapterManager,因为“Customers”表与“Orders”表相关。 这些变量在自动生成的代码中全部都声明为窗体类中的私有成员。 用于填充“DataGridView”的自动生成的代码位于 Form_Load 事件处理程序内。 用于保存数据以更新数据库的代码位于“BindingNavigator”的 Save 事件处理程序内。 你可根据需要移动或修改此代码。

GridView with BindingNavigator

可通过单击每个的右上角的智能标记来自定义“DataGridView”和“BindingNavigator”的行为 :

DataGridView and Binding Navigator smart tags

如果“数据源”窗口中未提供应用程序所需的控件,可添加所需控件。 有关详细信息,请参阅向“数据源”窗口添加自定义控件

还可将项从“数据源”窗口拖动到窗体上已有的控件上,从而将控件绑定到数据。 已绑定到数据的控件将其数据绑定重置为最近拖动到该控件上的项。 若要成为有效放置目标,控件必须能够显示从“数据源”窗口拖动到其上的项的基础数据类型。 例如,将数据类型为 DateTime 的项拖动到 CheckBox 上是无效的,因为 CheckBox 不能显示日期。

绑定到单独的控件中的数据

将数据源绑定到“详细信息”时,数据集中的每一列都将绑定到单独的控件。

Bind data source to details

重要

请注意,上图是从“Customers”表的“Orders”属性拖动,而不是从“Orders”表拖动。 通过绑定到 Customer.Orders 属性,“DataGridView”中创建的导航命令会立即反映在详细信息控件中。 如果从“Orders”表拖动,控件仍将绑定到数据集,但不与“DataGridView”同步。

下图显示了默认数据绑定控件,这些控件是在“Customers”表中的“Orders”属性绑定到“数据源”窗口中的“详细信息”后添加到窗体的 。

Orders table bound to details

另请注意,每个控件都有一个智能标记。 此标记启用仅适用于该控件的自定义。