用户控件 - 从数据源的 属性 个名称列表中选择 属性 的值

User control - Pick value of property from a list of property names of the data source

我创建了一个 UserControl 和一个名为 DataSource 的 属性。代码是这样的:

public partial class MyUserControl : UserControl
{
    public MyUserControl() 
    {
        InitializeComponent();
    }
    private object MyDataSource;

    [Browsable(true)]
    [System.ComponentModel.Bindable(true)]
    [TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    [Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    public object DataSource
    {
        get
        {
            return MyDataSource;
        }
        set
        {
            if (MyDataSource != value)
                MyDataSource = value;
        }
    }
}

现在我可以 select 在设计时从下拉列表中 select DataSource 属性 的值,如图所示:

现在我真正想要的是另一个名为 DataColumn 的 属性 ,当 DataSource 设置为 DataTable 时,用户可以 select 其中之一当 DataSource 已更改时,DataColumn 下拉列表中的值必须相应更改 "DataColumn" 属性 value.Obviously 的 "DataColumn" 属性 value.Obviously 属性下拉列表中的 DataTable 列

您可以使用以下属性装饰您的 属性:

[DefaultValue("")]
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design")]
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design",
    typeof(System.Drawing.Design.UITypeEditor))]
public string DataColumn{ get; set; }

在上面的代码中,DataMemberFieldEditor 负责显示包含 属性 个名称的下拉菜单。

此外,当您从下拉列表中选择 None 时,DataMemberFieldConverter 负责将 None 转换为空字符串。

这就是DisplayMember property of ListControl works. You can take a look at its source code.

的方式