c# 读取 xml 到列表视图
c# reading xml to listview
编写XML代码
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 文件中。我需要编写一个代码,在您打开 client.But 时将 xml 文件加载到 listview 我无法正确读取部分 lvmess.Items.Add 因为 while 或当我在外面做它时失败有效,但只有第一项(显然)有人可以帮助我吗?
这是读取文件代码
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);
}
}
您已经在 while 循环之外创建了 ListViewItem,并且在每次迭代中您只是更改了同一个 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);
}
}
编写XML代码
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 文件中。我需要编写一个代码,在您打开 client.But 时将 xml 文件加载到 listview 我无法正确读取部分 lvmess.Items.Add 因为 while 或当我在外面做它时失败有效,但只有第一项(显然)有人可以帮助我吗?
这是读取文件代码
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);
}
}
您已经在 while 循环之外创建了 ListViewItem,并且在每次迭代中您只是更改了同一个 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);
}
}