2017-07-14 113 views
0

编写XML代码C#读取XML来的ListView

XmlTextWriter xmlchat = new XmlTextWriter("chatroomdoc.xml", UTF8Encoding.UTF8); 
     xmlchat.WriteStartDocument(); 
     xmlchat.Formatting = Formatting.Indented; 
     xmlchat.WriteStartElement("Chat"); 
     foreach (ListViewItem one in lvmess.Items) 
     { 
      xmlchat.WriteStartElement("Client", one.SubItems[0].Text); 
      xmlchat.WriteElementString("Nickname", one.SubItems[0].Text); 
      xmlchat.WriteElementString("Message",one.SubItems[1].Text); 
      xmlchat.WriteEndElement(); 
     } 
     xmlchat.WriteEndElement(); 

     xmlchat.WriteEndDocument(); 
     xmlchat.Close(); 

此代码是其保存短信到一个XML文件,我的客户端聊天应用程序的一部分。我需要编写一个代码,当你打开客户端加载xml文件到列表视图。但我不能让阅读部分权利要么lvmess.Items.Add失败,因为虽然或当我做它以外,而它的工作,但只有第一项(显然)有人可以帮助我吗?

这是阅读文件代码

private void Form1_Load(object sender, EventArgs e){ 

     ListViewItem lis = new ListViewItem(); 
     using (XmlReader reader = XmlReader.Create("chatroomdoc.xml")) 
     { 
      int i =0; 

      while (reader.Read()) 
      { 

        switch (reader.Name.ToString()) 
        { 
         case "Nickname": 
          lis.Text=reader.ReadElementContentAsString(); 
         break; 
         case "Message": 
          lis.SubItems.Add(reader.ReadElementContentAsString()); 

         break; 
        } 
       //lvmess.Items.Add(lis); 
       //i++; 

      } 

      lvmess.Items.Add(lis); 
     } 
    } 

回答

0

您已经创建了一个ListViewItem while循环之外,并OON每次迭代你只是改变了相同的ListViewItem的数据。您应该在每次迭代时创建一个新项目并将其添加到您的列表中,以便稍后使用它。类似这样的:

private void Form1_Load(object sender, EventArgs e){ 

    //ListViewItem lis = new ListViewItem(); 
    using (XmlReader reader = XmlReader.Create("chatroomdoc.xml")) 
    { 
     int i =0; 

     while (reader.Read()) 
     { 
       ListViewItem lis = new ListViewItem(); 
       switch (reader.Name.ToString()) 
       { 
        case "Nickname": 
         lis.Text=reader.ReadElementContentAsString(); 
        break; 
        case "Message": 
         lis.SubItems.Add(reader.ReadElementContentAsString()); 

        break; 
       } 
       lvmess.Items.Add(lis); 
      //i++; 

     } 

     // lvmess.Items.Add(lis); 
    } 
} 
+0

请为您的答案提供一些说明。 – GibralterTop

+0

感谢它的工作。 –

+0

所以请接受它作为答案 –