none
Вывод двух полей в ListBox. RRS feed

  • Вопрос

  • Доброе время суток. Разрабатываю в качестве тренировки простенькое приложение с использованием Entity Framework.

    Имеется:

    Класс Person.

    public class Person
    {
            public int id { get; set; }
            public string firstName { get; set; }        
            public string lastName { get; set; }
            public int age { get; set; }
    }
    

    Класс MyContext, содержащий в себе список Person.

    public class MyContext : DbContext
    {
            public DbSet<Person> persons { get; set; }
    }

    BindingList<Person>, отвечающий за привязку данных к ListBox, заполняется при загрузке формы.

    using (MyContext mc = new MyContext())
    {
        myPersonBind = mc.LoadElements(); //Возвращает всех Person из базы
        listBox1.DataSource =  myPersonBind;
        listBox1.ValueMember = "id";                
        listBox1.DisplayMember = "firstName";        
    }

    Вопрос: можно ли каким-либо образом отобразить в ListBox не только firstName, но и lastName, например, через пробел? На ум пришло несколько решений, но все они кажутся не самыми лучшими:

    1. Использовать в базе данных дополнительное поле fullName (к примеру) и забивать туда firstName + lastName, соответственно, сделать такое же поле в классе и назначать его в качестве displayMember.

    2. Создать класс, который наследовал бы Person и имел бы доп. поле fullName.

    3. Использовать вместо first и last просто fullName и брать фамилию путём сплита по пробелу. Однако, в приложении предусматривается поиск по фамилии, а в таком варианте придётся сначала изъять все записи из бд, а потом уже проверять фамилии через сплит.

    4. Каким-то образом обозначить entity фреймворку, что поле fullName в классе присутствует, но создавать его в базе не следует и оно состоит из first + last. В  displayMember указать это поле. Данный вариант лично мне нравится больше всего, но найти, каким образом можно это сделать у меня не вышло. 

     

    3 декабря 2013 г. 16:40

Ответы

  • Добрый день.

    1,2,3 я бы переопределил ToString и не указывал DisplayMember.

    4. Пометьте свойство атрибутом [NotMapped].

    P.s. Переходите на XAML, там эта задача, да и многие другие, решается намного проще и красивее.

    • Помечено в качестве ответа Just Vlad 6 декабря 2013 г. 7:34
    4 декабря 2013 г. 6:11
    Отвечающий

Все ответы

  • Добрый день.

    1,2,3 я бы переопределил ToString и не указывал DisplayMember.

    4. Пометьте свойство атрибутом [NotMapped].

    P.s. Переходите на XAML, там эта задача, да и многие другие, решается намного проще и красивее.

    • Помечено в качестве ответа Just Vlad 6 декабря 2013 г. 7:34
    4 декабря 2013 г. 6:11
    Отвечающий
  • >1,2,3 я бы переопределил ToString и не указывал DisplayMember.

    Пробовал, но listBox выводил id. Также пробовал в displayMember указывать имя класса, аналогично, выводилось id.

    >4. Пометьте свойство атрибутом [NotMapped].

    Благодарю, заработало


    6 декабря 2013 г. 7:34