我有一个课程给我这个错误
public class Item
{
public string Name;
public int Id
public Item(string name, int id)
{
Name = name;
Id = id;
}
}
这是我的功能
var lstItems = new List<Item>();
while(...)
{
lstItems.Add(new Item(sAd_Ref, Convert.ToInt32(sAd_ID)));
}
comboBox1.DataSource = lstItems;
comboBox1.ValueMember = "Id";
comboBox1.DisplayMember = "Name";
在第二行,我得到了
的例外无法绑定到新的显示成员。
答案 0 :(得分:15)
您应该提供Name
和Id
属性。您无法将ComboBox
绑定到字段。
public string Name { get; set; }
public int Id { get; set; }
它也在docs中说明:
ValueMember Property
:获取或设置属性,以用作System.Windows.Forms.ListControl中项目的实际值。
答案 1 :(得分:11)
我知道帖子已经过时但接受的答案是不正确的。 Op需要改变他分配displayMember,valueMember和Datasource的顺序,然后记下添加的代码行。
comboBox1.DisplayMember="Name";
comboBox1.ValueMember = "Id";
comboBox1.DataSource = lstItems;
comboBox1.BindingContext = this.BindingContext;
答案 2 :(得分:1)
就我而言,我确实绑定了Browsable
属性设置为false
的属性。
即。由于以下原因发生错误:
[Browsable(false)]
public string MyProperty { get; set; }
我通过简单地删除属性来解决它:
public string MyProperty { get; set; }
答案 3 :(得分:1)
if (lstItems.Count > 0)
{
comboBox1.DataSource = lstItems;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
}
答案 4 :(得分:1)
您可以在设置值成员和显示成员后检查数据源为空或绑定数据源
cmbDepartment.DisplayMember = "Dep_Name";
cmbDepartment.ValueMember = "Dep_ID";
cmbDepartment.DataSource = model;
答案 5 :(得分:0)
tldr:确保要绑定的源不为空。
我收到相同的错误消息
“无法绑定到新的显示成员。参数名称:newDisplayMember”
从看起来像这样的代码
bindingSource.DataSource = _MyDict;
comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
绑定源已经挂接到设计器中。
设置ValueMember
属性时,组合框将尝试在列表中查找实例以对其进行反射(可能要检查该属性是否确实存在)。当源集合当前为空时,此操作将失败。
答案 6 :(得分:0)
就我而言,当我以为自己绑定到DataTable时,我就是绑定到DataSet。
答案 7 :(得分:0)
对于我来说,我已经通过建立属性设置顺序来解决了同样的问题:
With ComboBoxPartNumber
.DisplayMember = "SuperSKU"
.ValueMember = "TareRequired"
.DataSource = _TblNP
.Enabled = True
.Refresh()
With
_TblNP
字段是System.Data.DataTable
类型的全局本地字段。