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

注意

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

在 Windows 应用程序的窗体上显示数据时,可以从“工具箱”中选择现有的控件,而当标准控件无法提供应用程序所要求的功能时,还可以创作自定义控件。 本演练显示了如何创建实现 DefaultBindingPropertyAttribute 的控件。 用于实现 DefaultBindingPropertyAttribute 的控件可以包含一个可以绑定到数据的属性。 此类控件类似于 TextBoxCheckBox

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

创作用于数据绑定场景的控件时,需要实现以下数据绑定特性之一:

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

本演练创建了一个简单控件,用于显示表中单个列的数据。 此示例使用 Northwind 示例数据库的 Phone 表中的 Customers 列。 这个简单的用户控件通过使用 MaskedTextBox 并设置电话号码的掩码,以标准的电话号码格式显示客户的电话号码。

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

  • 创建新的“Windows 窗体应用 (.NET Framework)”

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

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

  • 实现 DefaultBindingProperty 特性。

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

  • 在“数据源”窗口中,设置“电话”列,以使用新的控件

  • 创建一个用于在新控件中显示数据的窗体。

先决条件

要完成本教程,需要在 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 窗体应用程序

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

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

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

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

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

    创建“SimpleControlWalkthrough”项目并将其添加到“解决方案资源管理器”中

将用户控件添加到项目中

本演练通过“用户控件”创建一个简单的可绑定数据控件。 在“SimpleControlWalkthrough”项目中添加“用户控件”项 :

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

  2. 在名称区域键入“PhoneNumberBox”,然后单击“添加”

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

设计 PhoneNumberBox 控件

本演练对现有 MaskedTextBox 进行了扩展,以创建 PhoneNumberBox 控件:

  1. MaskedTextBox 从“工具箱”拖到该用户控件的设计图面上

  2. 选择刚刚拖动的 MaskedTextBox 上的智能标记,然后选择“设置掩码”

  3. 在“输入掩码”对话框中选择“电话号码”,然后单击“确定”以设置掩码

添加所需的数据绑定特性

对于支持数据绑定的简单控件,实现 DefaultBindingPropertyAttribute

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

  2. 将 PhoneNumberBox 中的代码替换为以下代码:

    using System.Windows.Forms;
    
    namespace CS
    {
        [System.ComponentModel.DefaultBindingProperty("PhoneNumber")]
        public partial class PhoneNumberBox : UserControl
        {
            public string PhoneNumber
            {
                get{ return maskedTextBox1.Text; }
                set{ maskedTextBox1.Text = value; }
            }
    
            public PhoneNumberBox()
            {
                InitializeComponent();
            }
        }
    }
    
  3. “生成” 菜单中选择 “生成解决方案”

从数据库创建数据源

此步骤根据 Northwind 示例数据库中的 Customers 表,使用“数据源配置”向导创建数据源。 你必须具有对 Northwind 示例数据库的访问权限,才能创建连接。 若要了解如何设置 Northwind 示例数据库,请参阅如何:安装示例数据库

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

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

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

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

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

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

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

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

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

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

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

将电话列设置为使用 PhoneNumberBox 控件

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

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

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

  3. 在“Customers”节点上单击下拉列表箭头,然后从控件列表中选择“详细信息”

  4. 单击“电话”列上的下拉列表箭头,然后选择“自定义”

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

  6. 单击“电话”列上的下拉列表箭头,然后选择“PhoneNumberBox”

向窗体添加控件

通过将“数据源”窗口中的项拖到窗体上,可创建数据绑定控件

若要在窗体上创建数据绑定控件,请将主“Customers”节点从“数据源”窗口拖动到窗体上,并验证 PhoneNumberBox 控件是否用于显示 Phone 列中的数据 。

带有描述性标签的数据绑定控件将显示在窗体上,同时还显示一个工具条 (BindingNavigator),用于在记录间进行导航。 组件栏中显示“NorthwindDataSet”、CustomersTableAdapter、BindingSourceBindingNavigator

运行应用程序

F5 运行该应用程序。

后续步骤

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