将自定义列表与组合框等控件连接起来
Posted
技术标签:
【中文标题】将自定义列表与组合框等控件连接起来【英文标题】:connect custom list with control like combobox 【发布时间】:2010-08-21 11:20:00 【问题描述】:我有表格 - 自定义 ID(如 1.10、1.20)和名称(值可以重复的字符串)。而我的问题是将其设置为 winForms 控件,如组合框。但我希望该用户在字段中只会看到名称,而 ID 将不可见,但下意识地应该连接到控制名称,当用户在组合框中选择项目时,我可以获得此 ID。
有没有可能?
【问题讨论】:
【参考方案1】:像这样设置你的组合框:
// 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 ItemId = 1, Text = "Item 1",
new ItemId = 2, Text = "Item 2",
new ItemId = 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;
【讨论】:
超级!超级!理想的解决方案:)【参考方案2】:使用DisplayMember
属性设置将显示的内容并使用ValueMember
设置它实际链接到的内容。
例如在您的情况下,将DataSource
设置为表格,将DisplayMember
设置为名称,将ValueMember
设置为ID。
【讨论】:
【参考方案3】:绑定到列表:
项目:
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);
【讨论】:
【参考方案4】:摆脱 ItemData 概念必须是微软做过的最愚蠢的事情之一。心里真的很麻木。
这正是你所需要的。
这是一个模仿该行为的链接。 ItemData
【讨论】:
以上是关于将自定义列表与组合框等控件连接起来的主要内容,如果未能解决你的问题,请参考以下文章