我的应用程序有一个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();
}
答案 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。