我在装载我的表格时有这个,其中包含组合框(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(存在与事件类型一样多的项目,所以我认为它可以正常显示名称)。我不知道如何解决这个问题......
答案 0 :(得分:1)
你应该覆盖 ToString
方法(请记住C#是区分大小写的语言):
public override string ToString()
{
return String.Format("{0}({1})", _name, _id);
}
在设置DataSource之前设置DisplayMember
和ValueMember
也是一件好事。
答案 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
具有相应的公共属性Name
和Id
。