是否可以丢弃ValueMember
和DisplayMember
属性,并使组合框改为使用其他属性?
我要说的是:添加属性,以便它们在属性网格中不可见。
[Browsable(false)]
public new ValueMember {get; set;}
[Browsable(false)]
public new DisplayMember {get; set;}
然后,声明两个新属性,并用所需的值填充它们...
public new MyValueMember {get; set;}
public new MyDisplayMember {get; set;}
...并使组合框使用声明的属性进行绑定。
这可能吗?任何帮助都非常感谢。
编辑: 我正在使用实体框架,并且在设计时为绑定源设置数据源并设置MemberValue
它在尝试重新打开表单时给您一个错误,告诉您在绑定域的数据源上找不到属性名称的类型。
为了防止出现这种情况,我想到了添加属性MyValuemember和MyDisplayMember 和MyDatamember属性,因此在设置组合框数据源之后,我将从Mydatamember属性中选择Datamember,而不是相对地从列表中选择MyDisplayMember和MyValuemember,并将MyDisplay&Valuemember设置为base.DisplayMember&base.Valuemember,但是我不能这样做,因为数据源是父级,并且这些属性不可用。
所以我提出了一个可行的不同解决方案:
如果其他人跌跌撞撞地遇到了同样的问题,以下是我的解决方案:
我添加了一个新的数据源属性名称Base4Datasource 并且我添加了一个名为Base4Datamember的新DataMember属性
因此,在我设置Base4Datasource之后,我克隆了值并进行了设置,这比我填充Base4Datamember并进行设置时,我再次使用valuemember设置了数据源。
[Browsable(false)]
public new object DataSource
{
get => base.DataSource;
set => base.DataSource = value;
}
public object _base4DataSource = new BindingSource();
[AttributeProvider(typeof(IListSource))]
[DefaultValue(null)]
[RefreshProperties(RefreshProperties.Repaint)]
[Category("Base4Data")]
[DisplayName("Base4 DataSource")]
public object Base4DataSource
{
get => _base4DataSource;
set
{
if (value != null)
{
var cloned = value.CustomMemberwiseClone();
DataSource = cloned;
_base4DataSource = cloned;
}
else
{
_base4DataSource = null;
DataSource = null;
Base4DataMember = string.Empty;
BindingField = string.Empty;
}
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public string _base4DataMember;
[Category("Base4Data")]
[DisplayName("Base4 Data Member")]
[Description("Please Select a Datamember from the list")]
[TypeConverter(typeof(ComboboxDataMemberConverter))]
public virtual string Base4DataMember {
get => _base4DataMember;
set
{
_base4DataMember = value;
if (value != null)
{
base.DataSource = new BindingSource(DataSource, value);
}
{
ValueMember = string.Empty;
DisplayMember = string.Empty;
FillMethod = string.Empty;
}
}
}