如何在列表框中显示包含列表的字典
本文关键字:列表 包含 字典 显示 | 更新日期: 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;
}
}