0

我编写了将值从 xml 文件加载到textBoxes.

private void load(TreeNodeMouseClickEventArgs e)
{
     XDocument doc = XDocument.Load(@"test.xml");
     string nodeName = e.Node.Text;

     var data = from q in doc.Descendants("dog")
                where (string)q.Attribute("name") == nodeName
                select new Data
                {
                    name = q.Attribute("name").Value,
                    breed = q.Element("breed").Value,
                    sex = q.Element("sex").Value
                };


     foreach (var element in data)
     {
         textBox1.Text = element.name;
         textBox2.Text = element.breed;
         comboBox1.Text = element.sex;
     }
}

只要我不添加另一只具有相同name但不同的狗,它就可以正常工作breed。我的 xml 文件如下所示:

<dogs>
<dog name="Mike">
<breed>dachshund</breed>
<sex>true</sex>
</dog>
<dog name="Mike">
<breed>husky</breed>
<sex>true</sex>
</dog>
</dogs>

当我尝试从第二个节点加载值时,没有任何反应,因为Mike之前找到了名为的条目。尝试使用列表,但它不起作用(或者只是我做错了什么)。我想允许这种“重复”,只有 1:1 的重复是 forriben (已经写过这部分并且它有效)。如果有办法以breed与我获取类似的方式获取name,它将解决问题 - 只需where在查询中添加另一个。

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
   nodeName = e.Node.Text;
}

这就是我得到的方式name- 通过单击treeView. 如果有多个名称相同的条目,它只会加载最新的。所以我的问题是:如何处理?很明显,可以有狗叫汤姆,品种腊肠和狗叫汤姆,面包哈士奇。

4

1 回答 1

1

使用Tag属性而不是Text一个。

您必须修改填充树的方式,但您可以分配一个特定的对象或值Node.Tag,然后稍后再检索它。这可以包含一个 id 或可能包含有关给定狗的所有信息。然后在您的treeView1_NodeMouseClick方法中,TreeNodeMouseClickEventArgs e将包含比显示文本更多的信息。

于 2013-07-25T23:23:07.317 回答