Benutzer mit den meisten Antworten
C# XML in Listview laden

Frage
-
Mein Problem ist ich weiß nicht wie ich die XML Datei die schon beim drücken auf Speichern erstellt wird:
<?xml version="1.0" encoding="utf-8"?> <Items> <Item subitem1="Test1" subitem2="1" /> <Item subitem1="Test2" subitem2="2" /> <Item subitem1="Test3" subitem2="3" /> <Item subitem1="Test4" subitem2="4" /> </Items>
Wieder beim erneuten starten in die ListView wieder einlesen kann. Speichern klappt.
Das ist mein code fürs speichern. Falls es jemand sehen will:
private void button_save_Click(object sender, EventArgs e) { FileStream fileStream; StreamWriter streamWriter; XmlTextWriter xmlTextWriter; string filename = @"c:\Users\Christoph\Documents\Overview.txt"; try { // overwrite even if it already exists fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None); streamWriter = new StreamWriter(fileStream); xmlTextWriter = new XmlTextWriter(streamWriter); xmlTextWriter.Formatting = Formatting.Indented; xmlTextWriter.WriteStartDocument(); xmlTextWriter.WriteStartElement("Items"); const int SUBITEM1_POS = 0; const int SUBITEM2_POS = 1; for (int i = 0; i < listView1.Items.Count; i++) { String currentSubItem1 = listView1.Items[i].SubItems[SUBITEM1_POS].Text; String currentSubItem2 = listView1.Items[i].SubItems[SUBITEM2_POS].Text; xmlTextWriter.WriteStartElement("Item"); xmlTextWriter.WriteAttributeString("subitem1", currentSubItem1.ToString()); xmlTextWriter.WriteAttributeString("subitem2", currentSubItem2.ToString()); xmlTextWriter.WriteEndElement(); } xmlTextWriter.WriteEndDocument(); xmlTextWriter.Flush(); xmlTextWriter.Close(); } catch (IOException ex) { // do something about your error } }
Antworten
-
Hallo,
ich gehe mal davon aus, das du WinForms benutzt. An deiner Stelle würde ich nicht auf das manuelle auslesen per Stream setzen, das geht über LINQ to XML deutlich komfortabler:string path = @"Overview.xml";//XML sollte auch als solches benannt sein...oder aber mit einer eigenen Endung versehen werden //using System.Xml.Linq foreach(var node in XDocument.Load(path).Root.Elements("Item")) { var lvi = new ListViewItem(node.Attribute("subitem1").Value); lvi.SubItems.Add(node.Attribute("subitem2").Value); listView1.Items.Add(lvi); }
Und auch das speichern wäre in wenigen Zeilen erledigt:string path = @"Overview2.xml"; var doc = new XDocument(new XElement("Items")); foreach (var item in listView1.Items.OfType<ListViewItem>()) { var el = new XElement("Item"); el.SetAttributeValue("subitem1", item.SubItems[0].Text); el.SetAttributeValue("subitem2", item.SubItems[1].Text); doc.Root.Add(el); } doc.Save(path);
Das alles sollte soweit verständlich benannt sein. Wenn du trotzdem noch Fragen hast, beantworte ich dir diese gern.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Freitag, 20. März 2015 11:26
- Als Antwort markiert Aleksander Chalabashiev Montag, 23. März 2015 14:49
Alle Antworten
-
Hallo,
ich gehe mal davon aus, das du WinForms benutzt. An deiner Stelle würde ich nicht auf das manuelle auslesen per Stream setzen, das geht über LINQ to XML deutlich komfortabler:string path = @"Overview.xml";//XML sollte auch als solches benannt sein...oder aber mit einer eigenen Endung versehen werden //using System.Xml.Linq foreach(var node in XDocument.Load(path).Root.Elements("Item")) { var lvi = new ListViewItem(node.Attribute("subitem1").Value); lvi.SubItems.Add(node.Attribute("subitem2").Value); listView1.Items.Add(lvi); }
Und auch das speichern wäre in wenigen Zeilen erledigt:string path = @"Overview2.xml"; var doc = new XDocument(new XElement("Items")); foreach (var item in listView1.Items.OfType<ListViewItem>()) { var el = new XElement("Item"); el.SetAttributeValue("subitem1", item.SubItems[0].Text); el.SetAttributeValue("subitem2", item.SubItems[1].Text); doc.Root.Add(el); } doc.Save(path);
Das alles sollte soweit verständlich benannt sein. Wenn du trotzdem noch Fragen hast, beantworte ich dir diese gern.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Freitag, 20. März 2015 11:26
- Als Antwort markiert Aleksander Chalabashiev Montag, 23. März 2015 14:49