C#:为什么这段代码填充了这个listView乱序?

时间:2011-03-28 04:53:40

标签: c# xml listview

谁能看到我在哪里错了?代码应该打开一个xml文档,然后根据每个节点的内容,用每个节点/属性的innertext填充ListView的列。 List视图应如下所示:

Item1   Item2   Item3
Item4   Item5   Item6
Item7   Item8   Item9

然而它的结局如下:

Item7 Item2 Item5
Item4
Item1

产生此错误的代码如下:

private void openPasswordFileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        System.Xml.XmlDocument loadDoc = new System.Xml.XmlDocument();
        loadDoc.Load(Application.StartupPath + "\\database.xml");


        foreach (System.Xml.XmlNode descNode in loadDoc.SelectNodes("/Database/Account"))
        {
            lvItem = listView1.Items.Insert(index, descNode.Attributes["Description"].InnerText); ;
        }
        foreach (System.Xml.XmlNode userNode in loadDoc.SelectNodes("/Database/Account"))
        {
            lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, userNode.Attributes["Username"].InnerText)); ;
        }
        foreach (System.Xml.XmlNode passNode in loadDoc.SelectNodes("/Database/Account"))
        {
            lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, passNode.Attributes["Password"].InnerText)); ;
        }
        foreach(System.Xml.XmlNode node in loadDoc)
        {
            index += 1;
        }
    }

1 个答案:

答案 0 :(得分:4)

不确定xml doc的结构,但是你的foreach代码是错误的。 如果您尝试为每个父项添加子项,则

    foreach (System.Xml.XmlNode descNode in loadDoc.SelectNodes("/Database/Account"))
    {
        lvItem = listView1.Items.Insert(index, descNode.Attributes["Description"].InnerText); ;
        lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, userNode.Attributes["Username"].InnerText)); ;
        lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, passNode.Attributes["Password"].InnerText)); ;
    }