这是在 Windows 窗体、.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 page 上阅读,如果没有将 .DisplayMember 设置为 comboBox 控件,它将使用对象的默认 ToString,这就是我重写 toString 方法的原因。
结果符合预期:
这是我加载数据的方式:
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 时,似乎显示默认使用 that 值。
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" }
};
}
我将如何设置 valueMember 而将 DisplayMember 默认为 ToString 方法?
请注意,显示是 Person 类的两个属性的组合。 :)
最佳答案
我只想添加一个额外的属性:
public string DisplayName {
get { return String.Format("{0} {1}", Name, Lastname); }
}
public override string ToString() { return DisplayName; }
并设置 .DisplayMember = "DisplayName";
关于c# - 关于 ComboBoxes、ValueMember 和 DisplayMember 的一些混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213023/