演练:创建支持查找数据绑定的用户控件

更新:2007 年 11 月

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

有关控件创作的更多信息,请参见 设计时开发 Windows 窗体控件

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

数据绑定属性的用法

在简单控件上实现 DefaultBindingPropertyAttribute,如 TextBox,此类控件用于显示数据的单个列(或属性)。有关更多信息,请参见 演练:创建支持简单数据绑定的用户控件

在控件上实现 ComplexBindingPropertiesAttribute,如 DataGridView,此类控件用于显示数据列表(或表)。有关更多信息,请参见 演练:创建支持复杂数据绑定的用户控件

在控件上实现 LookupBindingPropertiesAttribute,如 ComboBox,该控件用于显示数据列表(或表),也需要显示数据的单个列或属性 (本演练页面描述了此过程)。

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

通过此演练,您将学会如何执行以下任务:

  • 创建新的“Windows 应用程序”。

  • 向您的项目添加新的“用户控件”。

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

  • 实现 LookupBindingProperty 属性。

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

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

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

先决条件

若要完成本演练,您需要:

创建 Windows 应用程序

第一步是创建“Windows 应用程序”。

创建新的 Windows 项目

  1. 在 Visual Studio 中,从“文件”菜单创建一个新的“项目”。

  2. 将项目命名为 LookupControlWalkthrough。

  3. 选择“Windows 应用程序”,再单击“确定”。有关更多信息,请参见创建基于 Windows 的应用程序

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

向项目中添加用户控件

由于此演练是从“用户控件”创建查找控件,所以您必须在“LookupControlWalkthrough”项目中添加“用户控件”项。

向项目中添加用户控件

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

  2. 在“名称”区域中键入 LookupBox,再单击“添加”。

    “LookupBox”控件即被添加到“解决方案资源管理器”中并在设计器中打开。

设计 LookupBox 控件

设计 LookupBox 控件

  • ComboBox 从“工具箱”拖到用户控件的设计图面。

添加所需的数据绑定属性

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

实现 LookupBindingProperties 属性

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

  2. 将 LookupBox 中的代码替换为下面的内容:

    <System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")> _
    Public Class LookupBox
    
        Public Property DataSource() As Object
            Get
                Return ComboBox1.DataSource
            End Get
            Set(ByVal value As Object)
                ComboBox1.DataSource = value
            End Set
        End Property
    
        Public Property DisplayMember() As String
            Get
                Return ComboBox1.DisplayMember
            End Get
            Set(ByVal value As String)
                ComboBox1.DisplayMember = value
            End Set
        End Property
    
        Public Property ValueMember() As String
            Get
                Return ComboBox1.ValueMember
            End Get
            Set(ByVal value As String)
                ComboBox1.ValueMember = value
            End Set
        End Property
    
        Public Property LookupMember() As String
            Get
                Return ComboBox1.SelectedValue.ToString()
            End Get
            Set(ByVal value As String)
                ComboBox1.SelectedValue = value
            End Set
        End Property
    End Class
    
    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 示例数据库中的 Customers 和 Orders 表,使用“数据源配置向导”创建数据源。必须具有访问 Northwind 示例数据库的权限才能创建连接。有关设置 Northwind 示例数据库的信息,请参见 如何:安装示例数据库

创建数据源

  1. 在“数据”菜单上单击“显示数据源”。

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

  3. 在“选择数据源类型”页面上选择“数据库”,再单击“下一步”。

  4. 在“选择您的数据连接”页面上进行以下某一操作:

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

      - 或 -

    • 选择“新建连接”,启动“添加/修改连接”对话框。有关更多信息,请参见“添加/修改连接”对话框(通用)

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

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

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

  8. 选择 Customers 和 Orders 表,再单击“完成”。

    “NorthwindDataSet”被添加到您的项目中,并且“数据源”窗口中出现 Customers 和 Orders 表。

设置“Orders”表的“CustomerID”列以使用 LookupBox 控件

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

设置“CustomerID”列,将其绑定到 LookupBox 控件

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

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

  3. 展开“Orders”节点(“Customers”节点中“Fax”列下面的节点)。

  4. 单击“Orders”节点上的下拉箭头并从控件列表中选择“Details”。

  5. 单击“CustomerID”列(在“Orders”节点中)上的下拉箭头并选择“自定义”。

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

  7. 单击“确定”。

  8. 单击“CustomerID”列上的下拉箭头并选择“LookupBox”。

向窗体添加控件

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

在 Windows 窗体上创建数据绑定控件

  • 将“Orders”节点从“数据源”窗口中拖到 Windows 窗体上,并验证是否使用“LookupBox”控件显示 CustomerID 中的数据。

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

设置查找绑定

  • 在“数据源”窗口中选择主“Customers”节点,并将其拖到“Form1”上的“CustomerIDLookupBox”中的组合框中。

    此操作对数据绑定进行设置,在保持源自 Orders 表的 CustomerID 值时,显示 Customers 表中的 CompanyName。有关更多信息,请参见 如何:创建查找表

运行应用程序

运行应用程序

  • 按 F5 运行应用程序。

  • 通过某些记录进行定位,并验证 LookupBox 控件中是否出现 CompanyName。

请参见

任务

如何:设置从“数据源”窗口中拖动时要创建的控件

概念

数据中的新增功能

“显示数据”概述

其他资源

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

在 Windows 应用程序中的窗体上显示数据

在应用程序中编辑数据

验证数据

保存数据