【发布时间】:2010-08-21 11:20:00
【问题描述】:
我有表格 - 自定义 ID(如 1.10、1.20)和名称(值可以重复的字符串)。而我的问题是将其设置为 winForms 控件,如组合框。但我希望该用户在字段中只会看到名称,而 ID 将不可见,但下意识地应该连接到控制名称,当用户在组合框中选择项目时,我可以获得此 ID。
有没有可能?
【问题讨论】:
我有表格 - 自定义 ID(如 1.10、1.20)和名称(值可以重复的字符串)。而我的问题是将其设置为 winForms 控件,如组合框。但我希望该用户在字段中只会看到名称,而 ID 将不可见,但下意识地应该连接到控制名称,当用户在组合框中选择项目时,我可以获得此 ID。
有没有可能?
【问题讨论】:
像这样设置你的组合框:
// 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;
}
【讨论】:
使用DisplayMember 属性设置将显示的内容并使用ValueMember 设置它实际链接到的内容。
例如在您的情况下,将DataSource 设置为表格,将DisplayMember 设置为名称,将ValueMember 设置为ID。
【讨论】:
绑定到列表:
项目:
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);
}
【讨论】:
【讨论】: