2016-03-10 69 views
0

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

我的代码:

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都没有匹配,因此失败。

什么是更好的方式来设置组合框中的描述性文本,而不改变选择的值?

(我的长期意图,超出了当前版本的积压,是将所有这一切到数据库中。然后,我可以只设置之后Value = db.ValueText = db.Text,一切都会工作,我想。)

回答

0

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

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