如何在列表框中显示包含列表的字典

本文关键字:列表 包含 字典 显示 | 更新日期: 2023-09-27 18:19:15

我目前有一个字典,其中包含一个键值和与该键相关联的列表。我已经阅读了如何将字典绑定到winforms中的ListBox,当我试图实现它时,它只是显示键值。

我想做的是有两个单独的列表框。在框1中选择键值,框2显示列表。当前代码如下:

var xmlDoc2 = new XmlDocument();
xmlDoc2.Load(textBox1.Text);
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
var node = xmlDoc2.SelectNodes("pdml/packet/proto[@name='ip']/@showname");
foreach (XmlAttribute attribute1 in node)
 {
   string ip = attribute1.Value;
   var arr = ip.Split(); var src = arr[5]; var dst = arr[8];
   List<string> l;
   if (!dict.TryGetValue(src, out l))
     {
        dict[src] = l = new List<string>();
     }
   l.Add(dst);
   listBoxSRC.DataSource = new BindingSource(dict, null);
   listBoxSRC.DisplayMember = "Value";
   listBoxSRC.ValueMember = "Key";
  }

到目前为止,它所做的是在listBoxSRC中显示键值,这很好。我需要做的是在listBoxDST中显示列表。

我也考虑过使用ListView来纠正这个问题,但我不知道它是如何工作的。

我知道应该有一个listBoxSRC_SelectedIndexChange的地方,但我一直得到'字典不出现在这个上下文中'的错误。

谢谢

如何在列表框中显示包含列表的字典

我用一对列表框很快地写了一些东西。只要制作任何带有一对列表框的表单,并连接事件,就可以自己尝试了。通过使用SelectedItem并将其转换为KeyValuePair,您不必在方法作用域之外声明该字典,如下所示。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        listBox1.DataSource = new BindingSource(new Dictionary<string, List<string>>
        {
            {"Four-Legged Mammals", new List<string>{"Cats", "Dogs", "Pigs"}},
            {"Two-Legged Mammals", new List<string>{"Humans", "Chimps", "Apes"}}
        }, null);
        listBox1.DisplayMember = "Value";
        listBox1.ValueMember = "Key";
    }
    private void listBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedItem != null)
        {
            var keyValue = (KeyValuePair<string, List<String>>) listBox1.SelectedItem;
            listBox2.DataSource = keyValue.Value;
        }
        else
        {
            listBox2.DataSource = null;
        }
    }