用户控件 - 从数据源的 属性 个名称列表中选择 属性 的值
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.
的方式
我创建了一个 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.