我创建了一个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”属性值。显然,当数据源更改时,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/