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

注释

此类 DataSet 和相关类是 2000 年代初的旧版 .NET Framework 技术,使应用程序能够在应用与数据库断开连接时处理内存中的数据。 这些技术对于使用户能够修改数据并将更改保留回数据库的应用特别有用。 尽管数据集是经过证实的成功技术,但新 .NET 应用程序的建议方法是使用 Entity Framework Core。 Entity Framework 提供了一种更自然的方式来将表格数据用作对象模型,并且具有更简单的编程接口。

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

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

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

数据绑定属性用法
在简单控件(如TextBox)上实现DefaultBindingPropertyAttribute,此等控件用于显示单列(或属性)数据。 有关详细信息,请参阅 创建支持简单数据绑定的 Windows 窗体用户控件
在显示数据列表(或表格)的控件(例如DataGridView)上实现ComplexBindingPropertiesAttribute功能。 (本演练页介绍了此过程。
在显示数据列表(或表格)同时还需展示单列或属性的控件上实现LookupBindingPropertiesAttribute(如ComboBox)。 有关详细信息,请参阅 创建支持查找数据绑定的 Windows 窗体用户控件

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

在本演练中,你将了解如何:

  • 向项目添加新 的用户控件

  • 直观地设计用户控件。

  • ComplexBindingProperty属性的实现。

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

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

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

先决条件

若要完成本教程,需要 .NET 桌面开发和数据存储以及处理 Visual Studio 中安装的工作负载。 若要安装它们,请打开 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 对象资源管理器 窗口。 (SQL Server 对象资源管理器作为数据存储和处理工作负荷的一部分安装在 Visual Studio 安装程序中。)展开“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 控件

若要将 a DataGridView 添加到用户控件,请将工具箱中的 a 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. 展开“数据源”窗口中的“客户”节点。

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

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

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

向窗体添加控件

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

运行应用程序

F5 运行应用程序。

后续步骤

根据应用程序要求,创建支持数据绑定的控件后,可能需要执行几个步骤。 一些典型的后续步骤包括: