ComboBox问题:无法绑定到新值成员

时间:2012-02-23 21:23:11

标签: c# winforms user-controls combobox

我有一个我作为用户控件创建的组合框(它实际上由标签,组合框和文本框组成)。我正在尝试将数据集绑定到组合框数据源,但我一直在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 - 信息数据源确实包含两列)

我尝试过一系列不同的策略但没有成功。请帮忙!

由于

6 个答案:

答案 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)

我认为您的组合属性修饰符公开不同。
但是,我会选择在用户控制级别实现两个新的公共属性 DisplayMemberValueMember只是为了避免这种丑陋的演员。
在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)] - 属性的属性在尝试绑定时也会导致此异常。