【问题标题】:Binding dictionary to combobox in C#在 C# 中将字典绑定到组合框
【发布时间】:2014-06-01 18:49:12
【问题描述】:

我的表单加载中有这个,其中包含组合框 (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 (有多少事件类型就有多少项,所以我认为它可以很好地显示名称)。我不知道如何解决这个问题...

【问题讨论】:

    标签: c# winforms dictionary combobox


    【解决方案1】:

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

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

    另外,最好在设置 DataSource 之前设置 DisplayMemberValueMember

    【讨论】:

    • 哈哈,这很简单:D 感谢您的快速帮助!
    【解决方案2】:

    如果您发现自己无法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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多