c# - 用户控件 - 从数据源的属性名称列表中选取属性值

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

我创建了一个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 属性的值,如图所示:

DataSource property in properties pan

现在我真正想要的是另一个名为 DataColumn 的属性,当 DataSource 设置为 DataTable 时,用户可以选择其中一个属性属性中下拉列表中的 DataTable 列在设计时会平移以获取“DataColumn”属性值。显然,当数据源更改时,DataColumn 下拉列表中的值必须相应更改

最佳答案

您可以使用以下属性来装饰您的属性(property):

[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 的方式ListControl 的属性有效。你可以看一下它的source code .

关于c# - 用户控件 - 从数据源的属性名称列表中选取属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46620318/

相关文章:

c# - 更改 .txt 的默认应用程序

c# - 获取枚举器 : return or yield return

c# - 如何在 C# MVC 3 中返回空白 View

c# - 以编程方式创建流程图

c# - 按回车键时更改焦点控制

c# - 将隐藏字段中的 int 列表绑定(bind)到 MVC c# 中模型的属性?

c# - C++ .NET 正在消亡吗?

c# - CS1607 : Assembly generation -- The version '1.4.0.85725' specified for the 'file version' is not in the normal 'major.minor.build.revision' format

c# - 用相应的字符串值标记位图数组

c# - FileNotFound 当我使用 Image.FromFile()