创建支持查找数据绑定的 .NET Framework Windows 窗体用户控件

注释

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

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

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

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

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

本演练创建绑定到源自两个表的数据的查找控件。 此示例使用 Northwind 示例数据库中的 CustomersOrders 表。 查阅控件绑定到 CustomerID 表中的 Orders 字段。 它使用此值在Customers表中查找CompanyName

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

  • 创建一个新的 Windows 窗体应用程序(.NET Framework)

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

  • 直观地设计用户控件。

  • LookupBindingProperty属性的实现。

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

  • “数据源”窗口中的“订单”表中设置 CustomerID 列以使用新控件。

  • 创建窗体以显示新控件中的数据。

先决条件

若要完成本教程,需要 .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 窗体应用项目

第一步是创建 Windows 窗体应用(.NET Framework) 项目。

  1. 在 Visual Studio 的“文件”菜单中,依次选择“新建”>“项目”。

  2. 在左侧窗格中展开 Visual C#Visual Basic ,然后选择 Windows 桌面

  3. 在中间窗格中,选择 Windows 窗体应用 项目类型。

  4. 将项目 命名为 LookupControlWalkthrough,然后选择 “确定”。

    LookupControlWalkthrough 项目已创建,并已添加到 解决方案资源管理器

将用户控件添加到项目

本演练从 用户控件创建查找控件,因此将 用户控件 项添加到 LookupControlWalkthrough 项目。

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

  2. 键入LookupBox“名称”区域,然后选择“添加”。

    LookupBox 控件将添加到解决方案资源管理器,并在设计器中打开。

设计 LookupBox 控件

若要设计 LookupBox 控件,请将工具箱中的 a ComboBox 拖动到用户控件的设计图面上。

添加所需的数据绑定属性

对于支持数据绑定的查找控件,可以实现 .LookupBindingPropertiesAttribute

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

  2. 将代码 LookupBox 替换为以下内容:

    using System.Windows.Forms;
    
    namespace CS
    {
        [System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")]
        public partial class LookupBox : UserControl
        {
            public object DataSource
            {
                get{ return comboBox1.DataSource; }
                set{ comboBox1.DataSource = value; }
            }
    
            public string DisplayMember
            {
                get{ return comboBox1.DisplayMember; }
                set{ comboBox1.DisplayMember = value; }
            }
    
            public string ValueMember
            {
                get{ return comboBox1.ValueMember; }
                set{ comboBox1.ValueMember = value; }
            }
    
            public string LookupMember
            {
                get{ return comboBox1.SelectedValue.ToString(); }
                set{ comboBox1.SelectedValue = value; }
            }
    
    
            public LookupBox()
            {
                InitializeComponent();
            }
        }
    }
    
  3. “生成 ”菜单中,选择“ 生成解决方案”。

从数据库创建数据源

此步骤使用 数据源配置 向导基于 Northwind 示例数据库中的 CustomersOrders 创建数据源。

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

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

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

  4. “选择数据连接 ”页上执行以下作之一:

    • 如果下拉列表中提供了与 Northwind 示例数据库的数据连接,请选择它。

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

  5. 如果数据库需要密码,请选择包含敏感数据的选项,然后选择“ 下一步”。

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

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

  8. 选择CustomersOrders表,然后选择完成

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

将 Orders 表中 CustomerID 列设置为使用 LookupBox 控件

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

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

  2. 展开“数据源”窗口中的“客户”节点。

  3. 展开“客户”节点中的“订单”节点(位于“传真”列下方)。

  4. 单击 “订单 ”节点上的下拉列表箭头,然后从控件列表中选择 “详细信息 ”。

  5. 单击 CustomerID 列(在 “订单 ”节点)上的下拉列表箭头,然后选择“ 自定义”。

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

  7. 单击 “确定”

  8. 单击 CustomerID 列上的下拉列表箭头,然后选择 LookupBox

向窗体添加控件

可以通过将项从 “数据源 ”窗口拖动到 Form1 来创建数据绑定控件。

若要在 Windows 窗体上创建数据绑定控件,请将 “订单” 节点从 “数据源 ”窗口拖到 Windows 窗体上,并验证 LookupBox 控件是否用于在列中显示数据 CustomerID

绑定该控件以从“Customers”表中查找 CompanyName

若要设置查找绑定,请在“数据源”窗口中选择主“客户”节点,然后将其拖到 Form1CustomerIDLookupBox 中的组合框上。

此操作对数据绑定进行设置,使其显示 Customers 表中的 CompanyName同时保留 Orders 表中的 CustomerID 值。

运行应用程序

  • F5 运行应用程序。

  • 浏览一些记录,并验证 CompanyName 是否出现在 LookupBox 控件中。