#winforms
#winforms
Вопрос:
У меня есть поле со списком, которое я хотел бы заполнить некоторой информацией. Ниже приведен код:
cmbSelectProject.Items.Clear();
cmbSelectProject.ValueMember = "Sid";
cmbSelectProject.DisplayMember = "Name";
cmbSelectProject.DataSource = new BindingSource(ApiCaller.LstProjects, null);
Итак, существует класс Project с существующими свойствами «Sid» и «Name». ApiCaller.Вызов LstProjects возвращает список проектов. Поэтому я ожидаю, что «Имя» не будет отображаться, а «Sid» будет использоваться в качестве значения.. Вместо этого я вижу кучу объектов проекта, отображаемых в выпадающем списке.
Что я здесь делаю не так? Спасибо за предложения.
Комментарии:
1. Попробуйте что-то вроде:
var projects = new BindingList<Project>(ApiCaller.LstProjects); cmbSelectProject.DataSource = new BindingSource(projects, null);
. В противном случае опубликуйте прототип класса проекта и фактический тип, возвращаемыйApiCaller.LstProjects
. (Вы должны привязаться к конкретному типу или к определению типа, например,typeof(List<Project>)
, в случае, если коллекция пуста или не определена в то время)2. Кстати, почему
cmbSelectProject.Items.Clear();
? Раньше вы устанавливали что-то еще в качестве источника данных?3. Джими, спасибо за твою помощь.. проверит
4. Ваша текущая последовательность назначений верна: сначала
DisplayMember
, затемValueMember
, затемDataSource
. Если при настройке источника данных возникает какая-то проблема, она вызвана самим источником данных или его содержимым в то время. Вот почему я спросил вас, есть ли у вас другой источник данных, установленный в элементе управления. Попробуйте установить дляnull
него значение, прежде чем назначать другое. Фактическое содержимоеApiCaller.LstProjects
на момент запуска этого кода также имеет значение; также имеет значение, где выполняется этот код.
Ответ №1:
Попробуйте эту последовательность.
- Установите свойство источника данных.
- Установите ValueMamber и DisplayMember.
- Обновить комбо. использование метода Refresh().