0

xml ファイルから .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>

2 番目のノードから値を読み込もうとしても、名前付きのエントリMikeが以前に見つかったため、何も起こりません。リストを使用しようとしましたが、うまくいきませんでした (または、何か間違ったことをしただけです)。そのような「重複」を許可したいのですが、1:1 の重複のみが禁止されています (この部分は既に作成されており、動作します)。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 に答える