创建一个 .NET Framework Windows 窗体用户控件,以支持使用 ADO.NET 进行复杂数据绑定

注意

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

在 Windows 应用程序的窗体上显示数据时,可以从“工具箱”中选择现有的控件。 或者,如果应用程序需要标准控件中无法实现的功能时,你还可以创作自定义控件。 本演练显示了如何创建实现 ComplexBindingPropertiesAttribute 的控件。 实现 ComplexBindingPropertiesAttribute 的控件包含可以绑定到数据的 DataSourceDataMember 属性。 此类控件类似于 DataGridViewListBox

有关控件创作的详细信息,请参阅在设计时开发 Windows 窗体控件

创作用于数据绑定方案中的控件时,需要实现以下数据绑定属性之一:

数据绑定特性的用法
在简单控件上实现 DefaultBindingPropertyAttribute(如 TextBox),此类控件用于显示数据的单个列(或属性)。 有关详细信息,请参阅创建支持简单数据绑定的 Windows 窗体用户控件
在控件上实现 ComplexBindingPropertiesAttribute(如 DataGridView),此类控件用于显示数据列表(或表)。 (本演练页面描述了此过程)。
在控件上实现 LookupBindingPropertiesAttribute(如 ComboBox),此类控件用于显示数据列表(或表),也需要显示数据的单个列或属性。 有关详细信息,请参阅创建支持查找数据绑定的 Windows 窗体用户控件

本演练创建显示表中多行数据的复杂控件。 本示例使用源自 Northwind 示例数据库的 Customers 表。 复杂用户控件将会在自定义控件中的 DataGridView 中显示 Customers 表。

在本演练中,你将学会如何执行以下任务:

  • 将新的“用户控件”添加到项目中

  • 以可视方式设计用户控件。

  • 实现 ComplexBindingProperty 特性。

  • 使用数据源配置向导创建数据集。

  • “数据源”窗口中,设置“Customers”表以使用新的复杂控件。

  • 通过将新控件从“数据源”窗口拖到“Form1”上来添加新控件

先决条件

要完成本教程,需要在 Visual Studio 中安装“.NET 桌面开发”以及“数据存储和处理”工作负载。 若要安装这些程序,请打开 Visual Studio 安装程序,然后在要修改的 Visual Studio 版本旁选择修改(或更多>修改)。 请参阅修改 Visual Studio

本演练使用 SQL Server Express LocalDB 和 Northwind 示例数据库。

  1. 如果尚未安装 SQL Server Express LocalDB,可以从 SQL Server Express 下载页或通过 Visual Studio 安装程序安装。 在 Visual Studio 安装程序中,可以将 SQL Server Express LocalDB 作为数据存储和处理工作负载的一部分或作为单个组件进行安装。

  2. 按照以下步骤安装 Northwind 示例数据库:

    1. 在 Visual Studio 中,打开“SQL Server 对象资源管理器”窗口。 (在 Visual Studio 安装程序中 SQL Server 对象资源管理器作为数据存储和处理工作负载的一部分安装。)展开 SQL Server 节点。 右键单击 LocalDB 实例并选择“新建查询”。

      此时将打开查询编辑器窗口。

    2. Northwind Transact-SQL 脚本复制到剪贴板。 此 T-SQL 脚本从头开始创建 Northwind 数据库并用数据填充它。

    3. 将 T-SQL 脚本粘贴到查询编辑器中,然后选择“执行”按钮。

      不久后,查询完成运行并且 Northwind 数据库创建完成。

创建 Windows 窗体应用项目

第一步是为 C# 或 Visual Basic 创建一个 Windows 窗体应用项目。 将项目命名为 ComplexControlWalkthrough

将用户控件添加到项目中

由于本演练是从“用户控件”创建复杂的可绑定数据控件,所以你必须将“用户控件”项添加到项目中 :

  1. 从“项目”菜单,选择“添加用户控件”

  2. 名称区域中键入 ComplexDataGridView,然后选择添加

    “ComplexDataGridView”控件将会添加到“解决方案资源管理器”中,并在设计器中打开该控件

设计 ComplexDataGridView 控件

若要将 DataGridView 添加到用户控件,请将 DataGridView 从“工具箱”拖动到用户控件的设计图面上。

添加所需的数据绑定特性

对于支持数据绑定的复杂控件,可以实现 ComplexBindingPropertiesAttribute

  1. 将“ComplexDataGridView”控件切换到代码视图。 (在“视图”菜单上,选择“代码”。

  2. ComplexDataGridView 中的代码替换为以下内容:

    using System.Windows.Forms;
    
    namespace CS
    {
        [System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
        public partial class ComplexDataGridView : UserControl
        {
            public object DataSource
            {
                get{ return dataGridView1.DataSource; }
                set{ dataGridView1.DataSource = value; }
            }
    
            public string DataMember
            {
                get{ return dataGridView1.DataMember; }
                set{ dataGridView1.DataMember = value; }
            }
    
            public ComplexDataGridView()
            {
                InitializeComponent();
            }
        }
    }
    
  3. “生成” 菜单中选择 “生成解决方案”

从数据库创建数据源

根据 Northwind 示例数据库中的 Customers 表,使用“数据源配置”向导创建数据源:

  1. 若要打开“数据源”窗口,在“数据”菜单上单击“显示数据源” 。

  2. 在“数据源”窗口,选择“添加新数据源”以启动“数据源配置”向导 。

  3. 在“选择数据源类型”页上,选择“数据库”,然后选择“下一步”。

  4. 在“选择数据连接”页面上,执行以下操作之一

    • 如果下拉列表中包含到 Northwind 示例数据库的数据连接,请选择该连接。

    • 选择“新建连接”以启动“添加/修改连接”对话框

  5. 如果数据库需要密码,请选择该选项以包括敏感数据,再选择“下一步”。

  6. 在“将连接字符串保存到应用程序配置文件”页面上单击“下一步” 。

  7. 在“选择数据库对象”页上,展开“表”节点

  8. 选择 Customers 表,然后选择“完成”。

    将“NorthwindDataSet”添加到项目中,并且“数据源”窗口中将显示 Customers 表 。

设置 Customers 表以使用 ComplexDataGridView 控件

在“数据源”窗口中,可以先设置要创建的控件,然后再将项拖动到窗体上:

  1. 在设计器中打开“Form1”

  2. 在“数据源”窗口中展开“Customers”节点

  3. 单击“Customers”节点上的下拉列表箭头,然后选择“自定义”

  4. 在“数据 UI 自定义选项”对话框中,从“关联的控件”列表中选择“ComplexDataGridView”

  5. 单击 Customers 表上的下拉列表箭头,然后从控件列表中选择“ComplexDataGridView”

向窗体添加控件

通过将某些项从“数据源”窗口拖到窗体,可创建数据绑定控件。 将主“Customers”节点从“数据源”窗口拖动到窗体上。 验证 ComplexDataGridView 控件是否用于显示表中的数据。

运行应用程序

F5 运行该应用程序。

后续步骤

根据应用程序的需求,在创建了支持数据绑定的控件后,可能还需要执行一些步骤。 接下来的一些常见步骤包括: