Вопрос

у меня есть ComboBox настроить следующим образом, где KVPList является IList (из KeyValuePair если это имеет значение):

comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;

Затем я установил привязку с SelectedValue, привязка к BindingSourceDataSet).По какой-то причине поле со списком всегда оказывается пустым при отображении формы.Однако он правильно заполнен (значения IList отображаются нормально и могут быть выбраны).

Теперь я изо всех сил старался отследить, и, похоже, сначала при привязке SelectedValue правильно устанавливается, но затем где-то по пути оно сбрасывается на null.Я тоже играл с порядком вызова, но безрезультатно.

Может ли кто-нибудь пролить свет на этот вопрос или предложить обходной путь?

Для справки: в том же бланке у меня есть еще один ComboBox в той же форме, со своим SelectedValue привязан к тому же BindingSourceDataSource это DataSet, а не IList и это работает как шарм.Возможно, это вариант сделать DataTable из IList, но кажется, что это лишние накладные расходы;Я генерирую IList из перечисления.

Это было полезно?

Решение

Ой.Потратив на это полдня, я понял это.Это была полностью ошибка с моей стороны.

А KVPList был установлен на IList из KeyValuePair<short,string>, но поле данных имеет тип int.По сути, привязка данных сработает и установит SelectedValue свойство.Тогда DisplayMember и ValueMember привязки сработают, проверяя SelectedValue снова.Поскольку ValueMember имеет тип short, нет int, он не найдет совпадение и поэтому установит для него значение null.

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

Я оставлю этот вопрос на случай, если кто-то еще столкнется с той же проблемой.Это трудно отследить, потому что я ожидаю, что он либо попытается создать исключение, либо выдаст исключение, а не молча обнулится.После всего, short и int оба типа значений и последнее, что я проверял (int)10 == (short)10 Справедливо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top