tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
1521
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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
     

  2. #2
    engelmarkus engelmarkus ist offline Mitglied Brokat
    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 .
     

  3. #3
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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
     

  4. #4
    engelmarkus engelmarkus ist offline Mitglied Brokat
    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
     

  5. #5
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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
     

  6. #6
    engelmarkus engelmarkus ist offline Mitglied Brokat
    Registriert seit
    Sep 2007
    Beiträge
    473
    Bittesehr, ich hoffe, das funktioniert einigermaßen, ich habs nicht großartig getestet.
    Angehängte Dateien Angehängte Dateien
     

  7. #7
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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?
     

  8. #8
    engelmarkus engelmarkus ist offline Mitglied Brokat
    Registriert seit
    Sep 2007
    Beiträge
    473
    Ja das gäbe es schon, aber dann wirds nochmal komplizierter...
     

  9. #9
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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)
     

  10. #10
    Thau Thau ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    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

  1. Antworten: 5
    Letzter Beitrag: 29.11.10, 15:38
  2. SQL- Inhalt von mehreren Zeilen verknüpfen
    Von KrustyDerClown im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 24.10.07, 12:32
  3. Inhalt aus mehreren Zeilen auslesen und addieren?
    Von ACIDJUNKIE85 im Forum Visual Basic 6.0
    Antworten: 16
    Letzter Beitrag: 02.06.07, 12:35
  4. .NET CF und ListViews
    Von theartmix im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 27.04.05, 13:41
  5. mit Javascript eine unter mehreren Tabellenzeilen und den Inhalt
    Von Johännchen im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 13.10.04, 14:29