Предположим, у меня есть имя класса Employee. У меня есть еще один класс под названием Controller, который является списком объектов Employee. Дело в том, что я не могу понять, как сделать этот список в списке.
Предположим, что следующий код (для простоты я уменьшу код до минимума):
class Employee
{
string name;
string position;
public Employee(string inputName, string inputPosition)
{
this.name = inputName;
this.position = inputPosition;
}
public string getName() { return name; }
public string getPosition() { return position; }
}
Теперь класс Controller:
class Controller
{
List<Employee> employeeList;
public Controller()
{
employeeList = new List<Employee>();
}
public List<Employee> getEmployeeList() { return employeeList; }
}
Теперь я хочу отобразить НАЗВАНИЯ в списке. Пока у меня есть:
Controller ctrl = new Controller();
ctrl.addEmployee("testname1", "testjob1");
ctrl.addEmployee("testname2", "testjob2");
listBox1.DataSource = ctrl.getEmployeeList();
Это приводит к тому, что listbox распечатывает текущее пространство имен списка. Поиск google заставил меня поверить, что мне нужно использовать listbox1.DisplayMember, но
listbox1.DisplayMember = "name";
не помогает. Вероятно, он по умолчанию имеет значение.ToString(), потому что он не находит свойство name в классе контроллера. Как я могу справиться с этим? Я думаю, что мне не хватает чего-то очевидного, я останавливаюсь на этом почти 2 часа, я не настолько опытен с.net.
DisplayMember
должен быть общедоступным, а не частным полем! (См. Этот документ MSDN для информации DisplayMember и полный пример.)
У тебя есть:
string name; // by default this is a private field of the Employee class
Тебе нужно:
public string Name { get { return name;} }
а также:
listbox1.DisplayMember = "Name";
name
является частным полем, а не публичной собственностью. Создайте публичное свойство, например, так:public string Name { get { return name;} }
и помните, что C # чувствителен к регистру, поэтому name! = Name.