2012-03-17 19 views
0

Bassicly xmlファイルをリストビューに正しく読み込むことができますが、リストビュー内のアイテムやリストビューにないアイテムに関する表示情報をクリックできるようにしたいXML。
私は、ユーザーがアイテムをクリックして何らかの形でその情報を取得しても、ラベルに何も表示していないときにXMLを読み込むことができると考えました。どんな助けも高く評価されるだろう。ラベルにxml情報を表示

XML:

<?xml version = "1.0" encoding="utf-8"?> 
<project> 
    <test> 
    <code>ss</code> 
    <name>test</name> 
    </test> 

    <test> 
    <code>ss1</code> 
    <name>test1</name> 
    </test> 
</project> 

コード:

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml; 
using System.Xml.Linq; 

namespace form 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

    XmlTextReader reader = new XmlTextReader("XMLfile1.xml"); 
    XmlNodeType type; 

    while (reader.Read()) 
    { 
     type = reader.NodeType; 
     if (type == XmlNodeType.Element) 
     { 
      if (reader.Name == "name") 
      { 
       reader.Read(); 
       listView1.Items.Add(reader.Value); 
      } 
     } 
    } 
    reader.Close(); 


    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 


    } 

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 


     XmlTextReader reader = new XmlTextReader("XMLFile1.xml"); 
     XmlNodeType type; 

     while (reader.Read()) 
     { 
      type = reader.NodeType; 

      if (type == XmlNodeType.Element) 
      { 
       if (reader.Name == "test") 
       { 
        reader.Read(); 
        codelabel.Text = "s"; 
       } 


      } 
     } 
    } 

    private void groupBox2_Enter(object sender, EventArgs e) 
    { 

    } 
} 
} 
+0

「正しく動作しない」とはどういう意味ですか?コンパイル時のエラー?実行時エラー?何も起こりません?私はコードをチェックしませんでしたが、あなたの例では、XmlTextReaderがどこからでも読み込まれる値(reader.Read(); codelabel.Text = "s";)。 –

+0

私はリストビュー上のアイテムを押すと何も表示しません。どうして私がクリックしてアイテムをクリックしてそのサブアイテムをラベルに印刷するかを知る方法 – Hashey100

答えて

1

書き込み:

protected string GetName(string code) 
{ 
    var item = XElement.Load("XMLfile1.xml").GetEnumerable("test", x => 
      new 
      { 
       Code = x.Get("code", string.Empty), 
       Name = x.Get("name", string.Empty) 
      }) 
      .FirstOrDefault(i => i.Code == code); 
    if(null != item) 
     return item.Name; 
    return "Item not found"; 
} 

それが右のコードを発見し、その後name値を返すまでこれは、ファイル、チェックの各1からリストを検索します。次に、その値をコントロールに配置します。名前で検索するのが間違っている場合は、FirstOrDefault行のコードをreturn item.Name行と交換するだけです。

0

ファイル内のデータを模倣したクラスを作成します。 Like:

public class Project 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

次に、あなたはXMLファイルを読み込み、最終的にはリストになります。このチュートリアルを見てみましょう:

Simple XML Parsing

private List<Project> _projects; 

あなたは、あなたのリストビューにリストからあなたのデータを追加します。あなたのListViewで

foreach(Project proj in _projects) 
{ 
    listView1.Items.Add(proj.Name); 
} 

あなたがラベルに適切な値を表示するには、リストの適切なインデックスにアクセスすることができますのSelectedIndexChanged。 these extensionsを使用して

codeLabel.Text = _projects[listView1.FocusedItem.Index].Code; 
0

testノードのValueプロパティは空です(サブノードとテキストは含まれません)。
私はあなたのコードを変更して、終了タグを読むまで、テストの開始からテキスト(宣言付きで、MSDNの例を見ることができます)を変更する必要があると思います。 (XMLファイルが大きくない場合)

などの代替あなたは(それがはるかに読みやすいですし、あなたは常に任意のノードのInnerXmlを持つことができます)LINQ to XMLまたは単にXmlDocumentを使用することを検討することができます。たとえば、article on CodeProjectと見なすことができます。

XMLを解析するためにできることの短いリストについては、this articleを読むことができます(私はそれはとても良いとは思いませんが、少なくともそれは...リストです)。

関連する問題