Небольшая путаница в отношении ComboBox, ValueMember и DisplayMember - PullRequest
1 голос
/ 06 марта 2011

Это в Windows Forms, .NET 4.0.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }

    public override string ToString()
    {
        return String.Format("{0} {1}", Name, Lastname);
    }
}

Я прочитал на странице MSDN , что если для элемента управления comboBox не установлено значение .DisplayMember, он использует ToString объекта по умолчанию, поэтому я переопределяю метод toString. 1006 *

Результат, как и ожидалось:

enter image description here

Вот как я загружаю данные:

private void button2_Click(object sender, EventArgs e)
{
    var people = LoadSamplePeople();
    comboBox1.DataSource = people;
}

private IEnumerable<Person> LoadSamplePeople()
{
    return new List<Person>()
    {
        new Person(){ Id = 1, Name = "Sergio", Lastname = "Tapia" },
        new Person(){ Id = 2, Name = "Daniel", Lastname = "Tapia" }
    };
}

Проблема возникает, когда я устанавливаю .ValueMember элемента управления, кажется, что дисплей по умолчанию использует это значение .

private void button2_Click(object sender, EventArgs e)
{
    var people = LoadSamplePeople();
    comboBox1.ValueMember = "Id";
    comboBox1.DataSource = people;
}

private IEnumerable<Person> LoadSamplePeople()
{
    return new List<Person>()
    {
        new Person(){ Id = 1, Name = "Sergio", Lastname = "Tapia" },
        new Person(){ Id = 2, Name = "Daniel", Lastname = "Tapia" }
    };
}

enter image description here

Как бы я установить valueMember, но по умолчанию DisplayMember для метода ToString?

Обратите внимание, что отображение является комбинацией двух свойств класса Person. :)

1 Ответ

4 голосов
/ 06 марта 2011

Я бы просто добавил дополнительное свойство:

public string DisplayName {
    get { return String.Format("{0} {1}", Name, Lastname); }
}

public override string ToString() { return DisplayName; }

и установил .DisplayMember = "DisplayName";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...