C# Использование списка объектов для заполнения поля со списком и сохранение доступных свойств объекта

У меня возникли трудности с заполнением поля со списком значениями внутри списка. Список содержит следующее.

public List<Classroom> classes= new List<Classroom>();

СОДЕРЖИТ:

public List<Students> Members{ get;}

public Classroom(string naam, string code, int maxPersonen)
{
    Name= name;
    Code = code;
    MaxPeople= maxpeople;
    Members= new List<Members>();
}

Я пытаюсь заполнить поле со списком классами List и показать каждый из этих классов следующим образом (в настоящее время использую это):

foreach(Classroom classrooom in repository.classes)
{
    cmbClass.Items.Add(classroom.Name + " (" + classroom.Code + ")");
}

Я хочу визуально показать их так, но при этом иметь доступ ко всем другим выбранным свойствам класса (при использовании).

Надеюсь, это достаточно ясно, чтобы понять! Заранее спасибо!


person Kevin    schedule 13.12.2015    source источник


Ответы (1)


Вам нужно привязать список как источник данных к полю со списком, а не добавлять по одному. И добавьте свойство DisplayName только для чтения в класс, чтобы возвращать Name + " (" + Code + ")", чтобы использовать его в качестве отображаемого значения. Вы можете добавить источник данных, установить отображаемое значение, и выбранное свойство элемента вернет объект.

    cmbClass.DataSource = classes;
    cmbClass.DisplayMember = classroom.DisplayName; 

Ссылка — класс ComboBox: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox%28v=vs.110%29.aspx

person Abhijit Annaldas    schedule 13.12.2015
comment
Я полагаю, мне придется создать экземпляр класса под названием класс, чтобы последовать вашему примеру. Также я получаю сообщение об ошибке в бите Valuemember; Невозможно неявно преобразовать тип «Класс» в «строку». пс. Я полагаю, это cmbClass.Datasource вместо ItemsSource? - person Kevin; 13.12.2015
comment
У вас уже есть экземпляры class в списке. И да, это свойство DataSource (msdn.microsoft .com/en-us/library/x8160f6f%28v=vs.110%29.aspx). Все, что вам нужно сделать, это назначить свойства DataSource и DisplayMember. Свойство ValueMember не требуется. Выбранный элемент вернет объект напрямую. - person Abhijit Annaldas; 13.12.2015
comment
Я не совсем понимаю. Видя, что имя «класс» было тем, что я использовал для заполнения своих выпадающих списков в моем foreach. Поскольку мне не нужен foreach для вашего метода, у меня нет «класса», к которому можно обратиться. - person Kevin; 13.12.2015
comment
Вместо class.Displayname используйте cmbClass.DisplayMember = DisplayName; и ваш метод работает отлично! Большое спасибо! - person Kevin; 13.12.2015
comment
Добро пожаловать, Кевин! Рад, что это помогло. Недавно я начал вносить свой вклад в StackOverflow, и мне очень приятно, что я смог вам помочь! - person Abhijit Annaldas; 13.12.2015