更改组合框的 ListItem 文本而不更改其值

Changing a combo box's ListItem Text without changing its Value

我的客户要求我将描述性文本添加到组合框的下拉列表中。我让那部分工作正常,但数据没有正确加载回组合框。我确定这是因为当在 ListItem.Text 属性 上设置描述性文本时,这会传播到 ListItem.Value。但我不想 Value 改变。

我的代码:

    public static List<ListItem> MakeDescriptiveList()
    {
        List<ListItem> items = new List<ListItem>();
        items.Add(new ListItem(string.Empty));
        for (double i = 1.0; i > -1E-9; i -= 0.05) //Roundoff error discovered!
        {
            string value = i.ToString("0.0#");
            items.Add(new ListItem(value));
        }
        items.Find(x => x.Value == "1.0").Text = "1.0\t Foo foo foo";
        items.Find(x => x.Value == "0.9").Text = "0.9\t Bar bar bar";
        items.Find(x => x.Value == "0.8").Text = "0.8\t Baz baz baz";
        ///intermediate items skipped
        items.Find(x => x.Value == "0.0").Text = "0.0\t FAIL";
        return items;

加载数据时,代码尝试设置 ComboBox1.SelectedValue = value,其中 value 在转换为字符串时为“1.0”。但这失败了,因为 TextValue 都不匹配。

在不更改选择值的情况下,在组合框中设置描述性文本的更好方法是什么?

(我的长期意图,除了当前版本的积压之外,是将所有这些移动到数据库中。然后我可以设置 Text = db.Text,然后设置 Value = db.Value,一切都会按我想要的方式工作.)

items.Add(new ListItem(value))设置新ListItemText。由于 Value 为空,查询 Value returns Text.

我通过在构造函数中显式设置 Value 解决了这个问题:items.Add(new ListItem(value, value))。然后正确更改 Text 并没有影响 Value.