2009-12-09 52 views
2

好的,首先我有下面的代碼工作..雖然我的問題是這樣的;我應該像下面的例子那樣編碼combobox數據綁定,還是有更簡單/更有效的方法?CSharp .NET 3.5 Windows Form DataBinding ComboBox to a List <>

首先,我需要操縱的結果從數據庫返回到顯示一個更具描述性的意義:

(我使用的基本類的鍵/值對)

class WashBayDesc 
    { 
     public string Key { get; set; } 
     public string Text { get; set; } 
    } 

現在我從DataReader檢索數據並執行操作,我需要它,然後將結果與列表項:

var washbaydata = new List<WashBayDesc>(); 

    // Read through the available cashboxes and populate a list/combobox 
    while (rdr.Read()) 
    { 
     string sWashBayDesc = null; 
     string sWB = rdr["washbay"].ToString(); 
     if (sWB.StartsWith("3")) 
     { 
      sWashBayDesc = "Bay " + sWB.Substring(1); 
     } 
     else 
     { 
      sWashBayDesc = "Auto " + sWB.Substring(1); 
     } 

     washbaydata.Add(new WashBayDesc { Key = sWB, Text = sWashBayDesc }); 
    } 

     // Now bind the hashtable (with our bay selectors) to the dropdown 
     cmbCashBoxes.DataSource = washbaydata; 
     cmbCashBoxes.ValueMember = "Key"; 
     cmbCashBoxes.DisplayMember = "Text"; 

所以..這個想法是我可以簡單的綁定組合框的數據源到washbaydata列表對象..這工作正常。

下一部分是檢索選定的項目值(即不是文本描述,而是值或密鑰本身)。這是我想也許是位不很看的權利,但它再次工程...

WashBayDesc myRes = new WashBayDesc(); 
    myRes = (WashBayDesc)cmbCashBoxes.SelectedItem; 
    string sWashBayCashBox = myRes.Key; 

所以結果是我的字符串sWashBayCashBox有選擇的關鍵...

我想它的工作原理,那很好,但有沒有更簡單/更清潔的方式?

回答

3
string sWashBayCashBox = (string)cmbCashBoxes.SelectedValue; 
+0

謝謝!優秀作品。所以我猜((字符串)鑄造只是獲取SelectedValue對象的第一個元素? 無論哪種方式,更簡單,更清潔..再次感謝你! – 2009-12-10 01:03:31

+0

我很高興你喜歡它。 SelectedValue返回一個對象,這就是我們需要向下轉換爲字符串的原因。 – 2009-12-10 03:49:59