Имеет ли значение порядок назначения DataSource для BindingSource и назначения DisplayMember для ComboBox в WinForms?C#

Место общения программистов C#
Ответить
Anonymous
 Имеет ли значение порядок назначения DataSource для BindingSource и назначения DisplayMember для ComboBox в WinForms?

Сообщение Anonymous »

Я обнаружил, что следующие два кода, меняющие порядок назначения DataSource BindingSource и назначения DisplayMember моему ComboBox, на самом деле дают разные результаты. Когда я назначаю DisplayMember перед определением источника данных, как показано в следующих кодах, ComboBox фактически не отображает желаемый элемент DisplayMember (myProtocolInstance.Name), но выводит «myNameSpace.Protocol». В обоих окнах сообщений отображается пустая строка.

Код: Выделить всё

Dictionary bs = new Dictionary() {"protocol", new BindingSource()};
this.protocolCombo.DataSource = bs["protocol"];
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
this.protocolCombo.DisplayMember = "Name";
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
bs["protocol"].DataSource = protocol_list;
Однако, когда я меняю их порядок таким образом, ComboBox правильно отображает желаемые свойства имени из экземпляра протокола. И окно сообщений также отображает более разумный вывод: в первом отображается пустая строка, а во втором — «Имя».

Код: Выделить всё

Dictionary bs = new Dictionary() {"protocol", new BindingSource()};
this.protocolCombo.DataSource = bs["protocol"];
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
bs["protocol"].DataSource = protocol_list;
this.protocolCombo.DisplayMember = "Name";
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: "Name"
Упрощенная версия класса протокола

Код: Выделить всё

public class Protocol
{
public string Name {  get; set; }
public Protocol(string name)
{
Name = name;
}
}
Интересно, это дефект Winform или он так задуман?
Дополнительная информация: Этот проект написан под .Net6. 0

Подробнее здесь: https://stackoverflow.com/questions/789 ... displaymem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»