我目前有一个字典,其中包含一个键值和一个与该键相关的列表。 我已阅读How to bind Dictionary to ListBox in winforms,当我尝试实现它时,它只显示键值。
我要做的是有两个单独的列表框。在框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某个地方,但我一直在这个上下文中出现&#39; dict&#39;错误。
由于
答案 0 :(得分:1)
我用一对列表框快速记下了一些东西。只需在其中添加一对列表框,然后连接事件即可自行尝试。通过使用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;
}
}