c# - 关于 ComboBoxes、ValueMember 和 DisplayMember 的一些混淆

标签 c# winforms combobox

这是在 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 方法的原因。

结果符合预期:

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 时,似乎显示默认使用 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" }
    };
}

enter image description here

我将如何设置 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/

相关文章:

c# - XML模式

c# - 如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

c# - 无法为此文件显示设计器,因为无法设计其中的任何类

c# - 2 个 ObservableCollections 1 个组合框 WPF

对于 API 17 及更高版本,Web View 中的 Android 选择下拉组合框显示为白色背景上的白色文本

c# - C# 中 "Method"本身的类型是什么?

c# - 使用 IAudioEncoderProperties 在 DirectShow 应用程序中配置 LAME MP3 编码器

c# - 有没有办法以符号通用方式循环调用方法?

c# - 为什么 SmartScreen 筛选器会阻止我的所有可执行文件?

java - 在组合框中选择升序时如何对元素列表进行排序