我有一个我作为用户控件创建的组合框(它实际上由标签,组合框和文本框组成)。我正在尝试将数据集绑定到组合框数据源,但我一直在ValueMember / Display成员上收到错误消息:
Cannot bind to the new display member - newdisplay member
Cannot bind to the new value member - parameter name: value
我以为我为usercontrol正确编码了所有内容:
public partial class ucComboBox : UserControl
{
#region Properties (6)
private bool isEditableReadOnly;
private bool ArrVisible;
private string _value;
private string _name;
public string value
{
get { return _value ; }
set { _value = value; }
}
public string name
{
get { return _name; }
set { _name = value; }
}
}
我在usercontrol中有一些其他属性和事件,但它们不应该是问题。
我绑定信息的代码:
((ucComboBox)ctrl).combobox.DataSource = info;
((ucComboBox)ctrl).combobox.ValueMember = "radiology_id";
((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name";
只要它击中了值成员就会爆炸,我得到上面提到的两个错误。我在用户控件中遗漏了什么吗?在我看来这应该工作..(fyi - 信息数据源确实包含两列)
我尝试过一系列不同的策略但没有成功。请帮忙!
由于
答案 0 :(得分:8)
同时确保ID和名称属性为公开,否则会出现错误:
Cannot bind to the new display member.
答案 1 :(得分:2)
绑定时遇到了同样的问题。我推翻了订单,一切都开始了。 原始代码将如下所示
((ucComboBox)ctrl).combobox.ValueMember = "radiology_id";
((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name";
((ucComboBox)ctrl).combobox.DataSource = info;
答案 2 :(得分:1)
下面的代码片段肯定会引起问题吗?
public string value
{
get { return _value ; }
set { _value = value; }
}
您需要将此名称命名为其他内容,例如: comboValue。 “value”表示传递给属性声明的隐式变量。
即
public string comboValue
{
get { return _value ; }
set { _value = value; }
}
答案 3 :(得分:0)
我认为您的组合属性修饰符与公开不同。
但是,我会选择在用户控制级别实现两个新的公共属性
DisplayMember
和ValueMember
只是为了避免这种丑陋的演员。
在set / get访问器中,我将在内部组合中反映值/
public string DisplayMember
{
get { return combobox1.DisplayMember; }
set { combobox1.DisplayMember = value;}
}
public string ValueMember
{
get { return combobox1.ValueMember; }
set { combobox1.ValueMember = value;}
}
答案 4 :(得分:0)
远离使用Datatset。创建了一个包含ID和Name值的类(“Facilities”)。将“info”更改为List类型。然后下面的代码工作正常:
info.Add(new Facilities { ID = dr["other_facility_id"].ToString(), Name = dr["other_facility_name"].ToString() });
((ucComboBox)ctrl).combobox.DataSource = new BindingSource(info, null);//info;
((ucComboBox)ctrl).combobox.ValueMember = "ID";
((ucComboBox)ctrl).combobox.DisplayMember = "Name";
没有绑定问题。
答案 5 :(得分:0)
我遇到了同样的问题,并找到了可能不适用于您的问题的解决方案,但可能对其他人有所帮助:
标有[Browsable(false)]
- 属性的属性在尝试绑定时也会导致此异常。