如何在ListBox中显示Dictionary

时间:2009-05-19 22:05:17

标签: dictionary listbox

我正在尝试将字典中的键/值对显示为ListBox。

Key Value
A    10
B    20
C    30

我想以下列格式在ListBox中显示它们

A(10)
B(20)
C(30)

使用以下代码,我可以将Listbox.Datasource链接到Dictionary。

myListBox.DataSource = new BindingSource(myDictionary, null);

显示为

[A, 10]
[B, 20]
[C, 30]

我无法弄清楚如何格式化它以便以我想要的方式显示。

任何帮助将不胜感激。

由于 阿希什

4 个答案:

答案 0 :(得分:6)

使用列表框中的Format事件:

KeyValuePair<string, int> item = (KeyValuePair<string, int>)e.ListItem;
e.Value = string.Format("{0}({1})", item.Key, item.Value);

答案 1 :(得分:5)

为了获得适当的长期灵活性,我会尝试使用一个类型化的对象,然后你可以做以后喜欢的事情,引发事件,更改值,不必使用唯一键,从列表框中获取真实对象而不仅仅是格式化的字符串

public partial class tester : Form
{
    public tester()
    {
        InitializeComponent();
         List<MyObject> myObjects = new List<MyObject>();
        MyObject testObject = new MyObject("A", "10");
        myObjects.Add(testObject);
       BindingSource bindingSource = new BindingSource(myObjects,null);
        listBox1.DisplayMember = "DisplayValue";
        listBox1.DataSource = bindingSource;
    }
}

public  class MyObject
{
    private string _key;
    private string _value;

    public MyObject(string value, string key)
    {
        _value = value;
        _key = key;
    }

    public string Key
    {
        get { return _key; }
    }

    public string Value
    {
        get { return _value; }
    }

    public string DisplayValue
    {
        get { return string.Format("{0} ({1})", _key, _value); }
    }
}

答案 2 :(得分:0)

您可以迭代遍历字典对象并构建列表框项目。

  foreach (KeyValuePair<string, int> kvp in myDictionary)
  {
      lbx.Items.Add(String.Format("{0}({1})", kvp.Key, kvp.Value.ToString()));
  }

答案 3 :(得分:0)

实际上,如果您想自定义从中派生的列表框并覆盖

protected override OnDrawItem

答案1将获得您在问题中所述的内容,但如果您想反映对象的变化,那么如果您编写绘图例程以便它会自动反映出来会更好。

或者您可以更改项目的文本,这也可以解决问题。

不要忘记调用BeginUpdate()和EndUpdate()