2009-10-22 9 views
0

Mon application dispose d'un contrôle ListView auquel des données sont ajoutées sur plusieurs colonnes et lignes. Lorsque le formulaire est fermé (appel de l'événement Form_Closing), le contenu est enregistré dans un fichier XML. Ensuite, à l'exécution suivante, le document XML est lu et son contenu est affiché dans le contrôle ListView. Pour une raison quelconque, il ne charge que la première colonne et n'enregistre pas toutes les données. Je suis nouveau à l'utilisation de XML pour enregistrer des données. Toute aide sera appréciée.C# - Enregistrer la listeVoir le contenu au format XML (avec multicolonnes) et lire sur Form_Load

C'est ce que j'ai à ce jour, je suis sûr qu'il ya beaucoup d'erreurs:

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(); 
    } 

Répondre

2

Votre premier problème est que sur FormClosing, vous écrivez sur les mêmes données:

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

(ne peut pas gras, désolé. Articles Remarque [i] .Text est le même.)

Vous voulez utiliser quelque chose comme AccountList.Items [i] .SubItems [0 ].Texte. Remplacez le 0 par 1, 2, etc. pour les index de colonne. Voir http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewsubitem.aspx pour plus d'informations.

Questions connexes