список объектов для просмотра списка

1

Предположим, у меня есть имя класса 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.

Теги:
winforms

1 ответ

2
Лучший ответ

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";
  • 0
    Я забыл упомянуть, я пытался сделать имя собственности частным. до сих пор не работает
  • 0
    @icarus: Пожалуйста, прочитайте мой ответ более внимательно. name является частным полем, а не публичной собственностью. Создайте публичное свойство, например, так: public string Name { get { return name;} } и помните, что C # чувствителен к регистру, поэтому name! = Name.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню