2016-11-13 5 views
-1

私は、XMLファイルからいくつかの項目を取得し、リストボックスに "title"ノードを表示し、タイトルが選択されたときにアイテムの他のノードをaに表示する基本的なC#アプリケーションを作るのに苦労しています。テキストボックス。テキストボックスは、ユーザーがXMLコンテンツを編集して変更を保存できるようにするためのものです。XMLをリストボックスに表示してC#のテキストボックスに渡す方法は?

私の問題はかなり基本的だと思います。リストボックスは正常に動作しますが、リストボックスで新しいタイトルを選択するとテキストボックスは更新されません。私はそれがあまりに複雑すぎるべきではないと思うが、私にとっては本当にここにこだわっている。

私はこのような質問が頻繁にポップアップすることを知っていますが、それらのほとんどは不正確または過度に複雑に思えます。私は(明らかに)C#の初心者です。できるだけ。

私のXMLサンプル:

<?xml version='1.0'?> 
    <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
     <first-name>Benjamin</first-name> 
     <last-name>Franklin</last-name> 
    </author> 
    <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2"> 
    <title>The Confidence Man</title> 
    <author> 
     <first-name>Herman</first-name> 
     <last-name>Melville</last-name> 
    </author> 
    <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6"> 
    <title>The Gorgias</title> 
    <author> 
     <name>Plato</name> 
    </author> 
    <price>9.99</price> 
    </book> 
</bookstore> 

CSファイル

ここ
private void btnLireXML_Click(object sender, EventArgs e) 
{ 
    XmlDocument xDox = new XmlDocument(); 
    xDoc.Load(books.xml); 

    XmlNodeList lst = xDoc.GetElementsByTagName("title"); 
    foreach (XmlNode n in lst) 
    { 
     listBox1.Items.Add(n.InnerText); 
    } 

} 
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    textBox1.Text = listBox1.SelectedItem.ToString(); 
} 

は、テキストボックスの部分で、私はほとんどすべてを試してみた...

WFAファイルはAが含まれボタンをクリックすると、XMLファイル、リストボックス、およびテキストボックスがロードされます(XMLノードごとにテキストボックスがある方が良いでしょう)

答えて

0

xmlが読み込まれると、その書籍をリストに入れます。

linq2xml(XElement)を使用することをお勧めします。これは従来のXmlDocumentよりも便利です。

private void ButtonLoad_Click(object sender, EventArgs e) 
{ 
    var xml = XElement.Load("books.xml"); 

    bookList = xml.Elements("book").ToList(); 

    foreach (var book in bookList) 
    { 
     string title = book.Element("title").Value; 
     listBox.Items.Add(title); 
    } 
} 

List<XElement> bookListはフォームフィールドです。

イベントハンドラでは、リストからインデックスでブックを取得します。

private void ListBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var book = bookList[listBox.SelectedIndex]; 

    textBox.Text = 
     "Genre: " + book.Attribute("genre").Value + Environment.NewLine + 
     "Price: " + book.Element("price").Value; 
    // Put other values to textbox (set Multiline = true) 
} 

もちろん、いくつかのテキストボックス(またはラベル)を使用できます。

textBoxGenre.Text = "Genre: " + book.Attribute("genre").Value; 
textBoxPrice.Text = "Price: " + book.Element("price").Value; 

など。

+0

ありがとうございます。それは、私が望んでいたものでした:短くて明確です - そして本当に大きな助けとなりました。 – Cunctator03

関連する問題