2016-03-10 70 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