C# - 将ListView内容保存为XML(使用多列)并在Form_Load上读取

时间:2009-10-22 07:47:48

标签: c# xml listview

我的应用程序有一个ListView控件,它在多个列和行中添加了数据。当窗体关闭(调用Form_Closing事件)时,内容将保存到XML文件中。然后,在以下运行时,将读取XML文档,并在ListView控件中显示其内容。出于某种原因,它只加载第一列而不保存所有数据。我是使用XML保存数据的新手。任何和所有帮助将不胜感激。

这是我到目前为止,我确信有很多错误:

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

        foreach (System.Xml.XmlNode emailNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(emailNode.Attributes["email"].InnerText);;
        }

        foreach (System.Xml.XmlNode passwordNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(passwordNode.Attributes["password"].InnerText); ;
        }

        foreach (System.Xml.XmlNode statusNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(statusNode.Attributes["status"].InnerText); ;
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Application.StartupPath + "\\Accounts.xml", null);

        writer.WriteStartElement("Accounts");
        for (int i =0; i < AccountList.Items.Count; i++)
        {
            writer.WriteStartElement("Item");
            writer.WriteAttributeString("email", AccountList.Items[i].Text);
            writer.WriteAttributeString("password", AccountList.Items[i].Text);
            writer.WriteAttributeString("status", AccountList.Items[i].Text);
            writer.WriteEndElement();
        }

        writer.WriteEndElement();
        writer.Close();
    }

1 个答案:

答案 0 :(得分:2)

您的第一个问题是,在FormClosing上,您正在写出相同的数据:

        writer.WriteAttributeString("email", **AccountList.Items[i].Text**);
        writer.WriteAttributeString("password", **AccountList.Items[i].Text**);
        writer.WriteAttributeString("status", **AccountList.Items[i].Text**);

(不能大胆,抱歉。注意事项[i]。文字是一样的。)

你会想要使用类似AccountList.Items [i] .SubItems [ 0 ]的东西。文字。用列索引替换0和1,2等。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewsubitem.aspx