почему в поле со списком отображаются объекты?

#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:

Попробуйте эту последовательность.

  1. Установите свойство источника данных.
  2. Установите ValueMamber и DisplayMember.
  3. Обновить комбо. использование метода Refresh().