我有表 - 自定义ID(如1.10,1.20)和名称(值可重复的字符串)。我的问题是将它设置为winForms控件,如组合框。但是我希望字段中的用户只会看到名称和ID不可见但是下意识地应该连接到控件中的名称,当用户在组合框中选择项目时我可以获得此ID。
任何想法都有可能吗?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
使用DisplayMember
属性设置要显示的内容,并使用ValueMember
设置实际链接的内容。
e.g。在您的情况下,将DataSource
设置为表格,将DisplayMember
设置为名称,将ValueMember
设置为ID。
答案 2 :(得分: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);
}
答案 3 :(得分:0)