无法绑定到组合框中的新显示成员

时间:2014-09-10 09:26:07

标签: c# winforms list combobox

我有一个课程给我这个错误

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";

在第二行,我得到了

的例外
  

无法绑定到新的显示成员。

8 个答案:

答案 0 :(得分:15)

您应该提供NameId属性。您无法将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类型的全局本地字段。