Проблема ComboBox: Невозможно привязать новый элемент значения - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть комбинированный список, который я создал как пользовательский элемент управления (на самом деле он состоит из метки, комбинированного списка и текстового поля). Я пытаюсь привязать набор данных к источнику данных 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; }
    }
}

У меня есть несколько других свойств и событий в пользовательском контроле, но они не должны быть проблемой.

Мой код для привязки информации:

  ((ucComboBox)ctrl).combobox.DataSource = info;
  ((ucComboBox)ctrl).combobox.ValueMember = "radiology_id";
  ((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name";

Он взрывается всякий раз, когда попадает в значение члена, и я получаю две ошибки, указанные выше. Я что-то упустил в своем пользовательском контроле? Мне кажется, это должно работать .. (к сведению - источник данных info содержит два столбца)

Я испробовал кучу разных тактик, но безуспешно. Пожалуйста, помогите!

Спасибо

Ответы [ 6 ]

8 голосов
/ 09 августа 2012

Также убедитесь, что свойства ID и Name Public , иначе вы получите ошибку:
Cannot bind to the new display member.

2 голосов
/ 24 мая 2016

У меня была такая же проблема при связывании.Я поменял порядок и все заработало.Оригинальный код будет выглядеть так

  ((ucComboBox)ctrl).combobox.ValueMember = "radiology_id";
  ((ucComboBox)ctrl).combobox.DisplayMember = "radiology_name";
  ((ucComboBox)ctrl).combobox.DataSource = info;
1 голос
/ 24 февраля 2012

Конечно, фрагмент кода ниже может вызвать проблему?

public string value
{
    get { return _value ; }
    set { _value = value; }
}

Вам нужно назвать это как-нибудь еще, например. comboValue. «значение» представляет неявную переменную, переданную в объявление свойства.

т.е.

public string comboValue
{
    get { return _value ; }
    set { _value = value; }
}
0 голосов
/ 28 февраля 2017

У меня была та же проблема, и я нашел решение, которое может не относиться к вашей проблеме, но может быть полезно для других:

Свойство, помеченное атрибутом [Browsable(false)], также будет вызывать это исключение при попытке привязки к нему.

0 голосов
/ 06 марта 2012

Отказ от использования набора данных.Создан класс («Услуги»), который будет содержать значения идентификатора и имени.Изменено "информация" на тип списка.Тогда следующий код работал нормально:

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

Никаких проблем с привязкой.

0 голосов
/ 24 февраля 2012

Я думаю, что у вас есть свойство Модификаторы вашего комбо, отличающееся от Public .
Однако я выберу два новых общедоступных свойства на уровне управления пользователями.
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;} 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...