【问题标题】:User control - Pick value of property from a list of property names of the data source用户控件 - 从数据源的属性名称列表中选择属性值
【发布时间】:2017-10-07 12:50:53
【问题描述】:

我创建了一个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;
        }
    }
}

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

现在我真正想要的是另一个名为 DataColumn 的属性,当 DataSource 已设置为 DataTable 时,用户可以在设计时从属性面板的下拉列表中选择该 DataTable 的列之一“ DataColumn”属性值。显然当DataSource发生变化时,DataColumn的下拉列表中的值也必须相应地变化

【问题讨论】:

    标签: c# .net winforms user-controls windows-forms-designer


    【解决方案1】:

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

    [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 转换为空字符串。

    这就是ListControlDisplayMember 属性的工作方式。你可以看看它的source code

    【讨论】:

    • 感谢您的回答。这显示了我想要的属性。但是如何根据 DataSource 用正确的值填充组合框?
    • 先选择DataSource属性的值,然后在下拉列表中选择DataColumn属性的值即可。
    • 这就是ListControlDisplayMember 属性的工作方式。你可以看看它的source code
    猜你喜欢
    • 2020-10-30
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多