在C#中将字典绑定到组合框

时间:2014-06-01 18:49:13

标签: c# winforms dictionary combobox

我在装载我的表格时有这个,其中包含组合框(cmbTip)

EventTypeRepository tip = new EventTypeRepository();
cmbTip.DataSource = new BindingSource(tip.FindAll(), null);
cmbTip.DisplayMember = "Value";
cmbTip.ValueMember = "Key";

(FindAll()是EventTypeRepository中的一个方法,它返回Dictionary(string,EventType>)) 出于某种原因,这会将MyProject.Model.EventType显示为所有组合框项目。我甚至补充道:

public string toString()
{
     return _name + "(" + _id + ")";
}

在我的EventType类中,但它仍然显示名称为MyProject.Model.EventType(存在与事件类型一样多的项目,所以我认为它可以正常显示名称)。我不知道如何解决这个问题......

2 个答案:

答案 0 :(得分:1)

你应该覆盖 ToString方法(请记住C#是区分大小写的语言):

public override string ToString()
{
    return String.Format("{0}({1})", _name, _id);
}

在设置DataSource之前设置DisplayMemberValueMember也是一件好事。

答案 1 :(得分:0)

如果您发现自己处于无法override ToString()的情况,则另一种选择是使用组合框中内置的Format事件。首先,您必须在组合框中将FormattingEnabled设置为true,然后订阅Format事件并使用类似于以下内容的代码。

private void cmbTip_Format(Object sender, ListControlConvertEventArgs e) 
{
    var item = (EventType) e.ListItem;
    e.Value = String.Format("{0}({1})", Name, Id);
}

这假设_name_id具有相应的公共属性NameId