将自定义列表与组合框等控件连接起来

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

【讨论】:

以上是关于将自定义列表与组合框等控件连接起来的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义格式(货币)应用于基于组合框选择的文本框?

如何删除组合框中的所有项目? [关闭]

如何将组合框与文本框连接起来?

自定义控件中的组合控件

MFC组合框控件下拉列表式如何读取所选值和设置默认选项

ExtJS4:如何在文本框、组合框等旁边显示验证错误消息