2010-08-21 17 views
1

我有表 - 自定義id(如1.10,1.20)和名稱(字符串值可以重複)。而我的問題是將其設置爲winForms控件,如組合框。但我想在該領域的用戶將只看到名稱和ID將不可見,但下意識應該連接到名稱控制,當用戶選擇組合框中的項目,我可以得到這個ID。連接自定義列表與控制像combobox

任何想法,這是可能的?

回答

2

設置您的組合框像這樣:

// item type to display in the combobox 
public class Item 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

// build new list of Items 
var data = List<Item> 
{ 
    new Item{Id = 1, Text = "Item 1"}, 
    new Item{Id = 2, Text = "Item 2"}, 
    new Item{Id = 3, Text = "Item 3"} 
}; 

// set databind 
comboBox1.DataSource = data; 
comboBox1.ValueMember = "Id"; // the value of a list item should correspond to the items Id property 
comboBox1.DisplayMember = "Text"; // the displayed text of list item should correspond to the items Id property 

// get selected value 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selectedValue = comboBox1.SelectedValue;   
} 
+0

超級超級!理想解決方案 – netmajor 2010-08-21 18:01:38

1

使用DisplayMember屬性設置將顯示的內容並使用ValueMember來設置它實際鏈接的內容。

例如在您的情況下,請將DataSource設置爲表格,DisplayMember設置爲名稱,將ValueMember設置爲Id。

1

綁定到一個列表:

項目:

class MyItem 
{ 
    public int Id { get; set; } 
    public string DisplayText { get; set; } 
} 

設置綁定:

List<MyItem> items = new List<MyItem> 
{ 
    new MyItem(){ Id = 1, DisplayText = "one"}, 
    new MyItem(){ Id = 2, DisplayText = "two"}, 
}; 

comboBox1.DisplayMember = "DisplayText"; // or whatever field your you want to display 
comboBox1.DataSource = items; 

尋找價值:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var item = comboBox1.SelectedItem as MyItem; 
    if (item != null) 
     Console.WriteLine(item.Id); 
} 
0

擺脫的ItemData概念不得不成爲最愚蠢的人之一微軟曾經做過的事情。實際上麻木麻木了。

這正是你需要的。

以下是模仿該行爲的鏈接。 ItemData