Параметр ComboBox DisplayMember, ValueMember Before vs After DataSource - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь изучить некоторые основы c манипулирования данными через Entity Framework. В этом конкретном сценарии я случайно натолкнулся на некоторые неоднозначные строки кода, которые я нашел в сети.

У меня есть Combobox со свойством DisplayMember и свойством ValueMember Set для определенных имен столбцов таблицы. Моя интерпретация до сих пор заключалась в том, чтобы связать DisplayMember и ValueMember после того, как я установил свойство DataSource в Combobox, поскольку оно кажется более интуитивным. Например:

ComboBox1.DataSource = SalesEntity.Products.ToList();
ComboBox1.DisplayMember = "CategoryName"
ComboBox1.ValueMember = "CategoryId"

В программе, над которой я сейчас работаю, я получил CastException, работающий с этим подходом. Я знал, что это действительно RuntimeError, но я не мог видеть свою форму (процесс начался, но пока не показан)! Я понял, что событие SelectedIndexChanged срабатывает, как только загружается форма. Итак, после нескольких кликов Google, я пришел по этой теме:

ComboBox.ValueMember и DisplayMember

Это объясняет, что DataSource должен быть установлен после привязки DisplayMember и ValueMember свойства со столбцом, чтобы избежать этих ошибок.

ComboBox1.DisplayMember = "CategoryName"
ComboBox1.ValueMember = "CategoryId"
ComboBox1.DataSource = SalesEntity.Products.ToList();

Хотя это сработало, я хочу знать, почему это работает?

Мои мысли : Я предполагаю, что установка ComboBox на dataSource сначала инициализирует свойство SelectedIndex, а когда свойство ValueMember / DisplayMember установлено, оно изменяет свойство SelectedIndex в соответствии со значениями по умолчанию для типа, связанного с этими свойствами (ValueMember / DisplayMember ). Принимая во внимание, что установка DataSource, наконец, позволяет избежать повторной инициализации свойств. Поправьте меня, если я ошибаюсь.
Должна была произойти некоторая инициализация, чтобы событие сработало, как только оно загрузится. Какая инициализация вызывает это событие так быстро?

...