2009-12-09 48 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