Luna1987 - Mo 16.03.09 15:12
Titel: Mit ListView Daten aus XML Dokument einfügen
Hy @ all 8)
Habe ein Problem :!: Habe eine ListView und dort verschiedene Spalten erzeugt. Diese sollen nun natürlich gefüllt werden.
Aus einem XML Dokument stammen die Daten, die in der jeweiligen Spalte eingefügt werden sollen. Über eine Schleife werden die Spalten erzeugt, die in dem XML Dokument vorhanden sind. Nur die erste Spalte ("File") wird vorher extra erzeugt. (genaueres: siehe Programmcode)
ABER: Entweder füllt sich bei mir nur die “File”Spalte komplett und der Rest unvollständig (siehe Dateianhang Bild1: Fall1) ODER alle anderen Spalten füllen sich wie gewünscht, nur die „File“Spalte füllt sich immer gleich (siehe Dateianhang Bild2: Fall2).
Habe mal ein Teil des XML Dokuments und beide unterschiedlichen Fälle als Programmcode hinzugefügt. Das liegt bestimmt irgendwie an dem „listView.Items.Add(item)“. Habe alles schon irgendwie ein paarmal verschoben, aber es kommt nie das richtige bei raus. Vielleicht kann mir jemand helfen?!
XML Dokument:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| <?xml version="1.0" encoding="UTF-8" ?> <sourcemonitor_metrics> <project version="2.5"> // Hier werden die Namen der einzelnen Spalten erwähnt <metric_names name_count="15"> <metric_name id="M0" type="number">Lines</metric_name> <metric_name id="M1" type="number">Statements </metric_name> ... <checkpoints checkpoint_count="1"> <checkpoint checkpoint_name="Baseline"> <files file_count="2"> // Hier wird der erste Dateiname, der geprüft wird, erwähnt <file file_name="CopyFromMainForm.cs"> <metrics metric_count="15"> // Hier sind die verschiedenen Analyseergebnisse der einzelnen Spalten der ersten Datei <metric id="M0">18</metric> <metric id="M1">11</metric> <metric id="M2">0.0</metric> <metric id="M3">0.0</metric> <metric id="M4">1</metric> ... </metrics> </file> // Hier wird der zweite Dateiname, der geprüft wird, erwähnt <file file_name="CopyFromProgram.cs"> <metrics metric_count="15"> // Hier sind die verschiedenen Analyseergebnisse der einzelnen Spalten der zweiten Datei <metric id="M0">25</metric> <metric id="M1">9</metric> <metric id="M2">20.0</metric> <metric id="M3">16.0</metric> <metric id="M4">1</metric> ... </metrics> </file> ... </sourcemonitor_metrics> |
(Tut mir leid, das es so blöd eingerückt ist, aber das funktioniert hier nicht vernünftig mit diesen Tabs usw.)
Programmcode Fall 1:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| foreach (XmlNode files in filess) { XmlNode file = files["file"]; if (file == null) { break; } if (fileName == file.Attributes["file_name"].InnerText) { foreach (XmlNode metrics in metricss) { ListViewItem item = new ListViewItem(fileName); XmlNode metric = metrics["metric"]; while (true) { if (metric == null) { break; }
item.SubItems.Add(metric.InnerText); metric = metric.NextSibling; } listView.Items.Add(item); } } } |
Programmcode Fall 2:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| foreach (XmlNode files in filess) { XmlNode file = files["file"]; if (file == null) { break; } ListViewItem item = new ListViewItem(fileName); if (fileName == file.Attributes["file_name"].InnerText) { foreach (XmlNode metrics in metricss) { XmlNode metric = metrics["metric"]; while (true) { if (metric == null) { break; } item.SubItems.Add(metric.InnerText); metric = metric.NextSibling; } } } listView.Items.Add(item); } |
Ich danke euch für eure Hilfe.
Lg Anne :D