ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
1521
1521
EMPFEHLEN
-
Hallo, ich habe 6 Listviews und 2 Label und von denen möchte ich gerne den Inhalt in eine XML Datei schreiben. Die ListViews haben alle eine unterschiedliche Anzahl von Columns(weiß nicht wie das auf deutsch heißt)
Listview 1: 3
2: 7
3: 6
4: 14
5: 8
6: 15
Zum Test heißen die erstmal a,b,c..etc., also a,b,c bei der ersten und d,... usw bei den anderen. Die Anzahl der Einträge ist auch immer verschieden viel, aber bei jedem Listview gleich viel. Die Buchstaben werden dann später noch durch Begriffe ersetzt.
Die XML Datei soll so ca. aussehen:
Code xml: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
<?xml version="1.0" encoding="ISO-8859-1"?> <Inhalte> <Global> <Name>Name</Name> <Datum>01.01.2008 00:00:00</Datum> </Global> <Information Nr="1"> <a>test</a> <b>19</b> <c>5</c> </Information> <Test Nr="1"> <d>text</d> <e>859</e> <f>807</f> <g>10</g> <h>0</h> <i>41</i> <j>test</j> </Test> ....
Da soll der Code aufgerufen werden
Code vbnet:1 2 3 4 5
SaveFileDialogSave.InitialDirectory = Application.StartupPath & "\saves" If SaveFileDialogSave.ShowDialog() = DialogResult.OK Then Dim dataPath As String = SaveFileDialogSave.FileName End If
Ich hoffe jemand versteht was ich meine und kann mir helfen.
Danke
~Thau
-
19.09.08 21:27 #2
- Registriert seit
- Sep 2007
- Beiträge
- 473
Hast du dich schon mal mit WPF beschäftigt? Das wäre nämlich für so ein Problem ideal. Du könntest ein schönes Databinding machen und hättest keine Probleme mehr.
Code :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
... <Window.Resources> <XmlDataProvider Source="Daten.xml" x:Key="Daten" XPath="/Daten"/> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <ListView Grid.Row="0" Margin="10" ItemsSource="{Binding Source={StaticResource Daten}, XPath=ListView1//Eintrag}"> <ListView.View> <GridView> <GridViewColumn Header="a" DisplayMemberBinding="{Binding XPath=@a}"/> <GridViewColumn Header="b" DisplayMemberBinding="{Binding XPath=@b}"/> <GridViewColumn Header="c" DisplayMemberBinding="{Binding XPath=@c}"/> </GridView> </ListView.View> </ListView> <ListView Grid.Row="1" Margin="10" ItemsSource="{Binding Source={StaticResource Daten}, XPath=ListView2//Eintrag}"> <ListView.View> <GridView> <GridViewColumn Header="d" DisplayMemberBinding="{Binding XPath=@d}"/> <GridViewColumn Header="e" DisplayMemberBinding="{Binding XPath=@e}"/> <GridViewColumn Header="f" DisplayMemberBinding="{Binding XPath=@f}"/> <GridViewColumn Header="g" DisplayMemberBinding="{Binding XPath=@g}"/> </GridView> </ListView.View> </ListView> </Grid> ...
Dazu die passende XML-Datei:
Code :1 2 3 4 5 6 7 8 9 10 11 12
<?xml version="1.0" encoding="utf-8" ?> <Daten> <ListView1> <Eintrag a="..." b="..." c="..."/> <Eintrag a="..." b="..." c="..."/> </ListView1> <ListView2> <Eintrag d="..." e="..." f="..." g="..."/> <Eintrag d="..." e="..." f="..." g="..."/> </ListView2> </Daten>
Anders wird das doch arg mühselig. Du müsstest jede Zeile aus der ListView auslesen, durch die einzelnen SubItems gehen und diese dann einzeln in die XML-Datei schreiben.
Überhaupt finde ich, dass deine XML-Datei für sowas nicht geeignet ist. Du solltest besser versuchen, so wie oben Attribute zu verwenden und nicht für jede Spalte einen eigenen Knoten
.
-
Hi,
damit habe ich mich noch nicht beschäftigt.
Meine XML Dtaie war so aufgebaut,weil ich bishe rnur ein Script zum einlesen gefunden hatte und mir zum Testen die XML erstmal selber gebaut habe. Könntest du mir ein Beispiel geben,wie es mit dme umständlichen Weg wäre? Der Datename variiert eh immer bei der Datei, da es über den FileSaveDialog gemacht wird. Bei dme Beispiel bräuche ich nur eins, wo das ListView angesprochen wird, ich die Anzahl der Spalten angebe und die Items+Subitems auslese. Das müsste ich dann halt für jedes ListView machen. Aber schonmal danke für deine Mühe.
~Thau
-
19.09.08 23:00 #4
- Registriert seit
- Sep 2007
- Beiträge
- 473
Nachdem du ja die Anzahl der Spalten vorher nicht weißt, würde ich das so machen. Ich verwende die gleiche XML-Datei wie vorher:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Dim Daten = XElement.Load("Daten.xml") For Each spalte In Daten.<ListView2>.<Eintrag>.First.Attributes ListView1.Columns.Add(spalte.Name.LocalName) Next For Each eintrag In Daten.<ListView2>.<Eintrag> Dim spalten As New List(Of String) For Each spalte In eintrag.Attributes spalten.Add(spalte.Value) Next ListView1.Items.Add(New ListViewItem(spalten.ToArray())) Next
-
Ich stell mich glaub grad ein bisschen blöd an, aber kannst du mir vielleicht ein Beispiel Projekt machen. Reichen würde mir: Die Inhalte des ListViews in eine XML Laden und dann die xml Datei öffnen und den Inhalt wieder in das ListView laden. Dann weiß ich genau was ich ersetzen muss etc..
Danke
~Thau
-
19.09.08 23:53 #6
- Registriert seit
- Sep 2007
- Beiträge
- 473
Bittesehr, ich hoffe, das funktioniert einigermaßen, ich habs nicht großartig getestet.
-
Vielen dank. Aber ich hab grad gesehen, das das nur im Framework 3.5 läuft. Gibt es da auch eine Möglichkeit das unter 2.0 laufen zu lassen?
-
20.09.08 00:55 #8
- Registriert seit
- Sep 2007
- Beiträge
- 473
Ja das gäbe es schon, aber dann wirds nochmal komplizierter...
-
Ich hab jetzt den Code zum Speichern mehrere Male hintereinander gemacht für die verschiedenen ListViews, nur sgat er mir immer etwas von:
NullReferenceException was unhandled
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Was heißt das? oder gibt es eine bessere Methode um alle 6 ListViews zu speichern?
EDIT: So jetzt kommen keine Fehler mehr, nur wie machen ich das, das der nicht immer die vorigen Einträge ersetzt, weil ich nach jedem auslesen sage, er soll speichern, also mit:
Daten.Save("Daten.xml"). Das Teil hab ich für jede Abfrage einfach immer ergänzt, also Daten1.Save("Daten.xml"), damit er nicht immer den Inahtl von Daten überschreibt und wegen die Inhalte von dem von Data XElement.Geändert von Thau (20.09.08 um 02:22 Uhr)
-
Also ich hab jetzt nochmal rumprobiert, bekomme es abe rnicht hin, das ich mehere Einträge in die XML schreiben kann. Es werden immer die alten Einträge überschrieben. ICh habe das so gemacht:
Code vbnet: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
Dim Daten As New XElement("Daten", <Information></Information>) For Each zeile As ListViewItem In ListView1.Items Dim eintrag = <Eintrag/> For Each spalte As ColumnHeader In ListView1.Columns eintrag.Add(New XAttribute(spalte.Text, zeile.SubItems(spalte.Index).Text)) Next Daten.Element("Information").Add(eintrag) Next Daten = New XElement("Daten", <Test></Test>) For Each zeile As ListViewItem In ListView2.Items Dim eintrag = <Eintrag/> For Each spalte As ColumnHeader In ListView2.Columns eintrag.Add(New XAttribute(spalte.Text, zeile.SubItems(spalte.Index).Text)) Next Daten.Element("Test").Add(eintrag) Next ' Daten.Save("Daten.xml")
Aber das geht ja irgendwie nicht richtig. Kann mir das jemand korrigieren damit es geht? danke
~Thau
Ähnliche Themen
-
Von mehreren Webseiten gewissen Inhalt auslesen/parsen
Von Prengepower im Forum PHPAntworten: 5Letzter Beitrag: 29.11.10, 15:38 -
SQL- Inhalt von mehreren Zeilen verknüpfen
Von KrustyDerClown im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 24.10.07, 12:32 -
Inhalt aus mehreren Zeilen auslesen und addieren?
Von ACIDJUNKIE85 im Forum Visual Basic 6.0Antworten: 16Letzter Beitrag: 02.06.07, 12:35 -
.NET CF und ListViews
Von theartmix im Forum .NET ArchivAntworten: 2Letzter Beitrag: 27.04.05, 13:41 -
mit Javascript eine unter mehreren Tabellenzeilen und den Inhalt
Von Johännchen im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 13.10.04, 14:29





Zitieren
Login





