Listview Einträge im bestimmten Format in txt speichern

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von rotherford.

    Listview Einträge im bestimmten Format in txt speichern

    Servus,

    Ich hab ne Listview, die in der Zeilenanzahl variabel ist. Pro Zeile befinden sich 4 Spalten.
    Ich möchte den Text jeder Zeile aus Listview mit einem bestimmten Format (genau so, wie er in der listview angezeigt wird) in eine txt speichern:

    05.07.12-13:30-16-Text

    Das "-" wird zwischen den einträgen benötigt, um beim laden splitten zu können.

    Es soll pro Zeile so ein Format wie oben beschrieben in die txt geschrieben werden.

    Es wurden schon ein paar Threads bezüglich meines vorhabens von mir angeschaut, jedoch keine genaue Funktion für mein Vorhaben beschrieben.

    Ich würde mit ner For Each Schleife beginnen. Falscher Ansatz?

    GreetZ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TRiViUM“ ()

    Eine Listview in einem Textdokument zu speichern ist Käse ;)

    Guck dir mal das Serialisieren an.
    XmlSerializer od. BinaryFormatter & Co.

    [VB.NET] ListView Inhalt - Speichern bzw. Laden
    Beitrag von @kevin89 beachten.

    Liebe Grüße
    /nicht getestet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rotherford“ ()

    Ich hab noch nie mit einer List-View gearbeitet, ich weis auch nicht direkt wie sie funktioniert.

    Ich versuch dir mal einen Ansatz zu geben:

    Dim TextWriter = New My.Computer.FileSystem.OpenTextfileWriter
    For n As Integer = 1 to Zeilenanzahl
    Textwriter.WriteLine(listview.spalte1 & "-" & listview.spalte2 & etc)
    Next
    TextWriter.Close()

    Naja hab das mal aus meinem Gedächtnis abgeschrieben, aber habe keine Ahnung ob das so passt.
    also mit deinem code

    VB.NET-Quellcode

    1. Textwriter.WriteLine(listview.spalte1 & "-" & listview.spalte2 & etc)


    müsste ich das in eine for each schleife setzen, weil die zeilenanzahl wie gesagt variabel ist.
    Aber ich werde das mal so probieren, danke für antworten :)

    probier das gleich mal aus.

    TRiViUM schrieb:

    VB.NET-Quellcode

    1. Textwriter.WriteLine(listview.spalte1 & "-" & listview.spalte2 & etc)
    Jetzt ist es hoffentlich noch Zeit, auf ein DataGridView umzusteigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    also ich habe jetzt das:

    VB.NET-Quellcode

    1. SaveFileDialog1.ShowDialog()
    2. Dim ListViewContent As String = ""
    3. For I As Integer = "0" To ListView1.Items.Count - 1
    4. ListViewContent += ListView1.Items.Item(I).Text & "-"
    5. For Int As Integer = 0 To ListView1.Items.Item(I).SubItems().Count - 1
    6. ListViewContent += ListView1.Items.Item(I).SubItems(Int).Text & "-"
    7. Next
    8. ListViewContent += vbNewLine
    9. Next
    10. Mit DataGridView habe ich noch nie gearbeitet...
    11. File.AppendAllLines(SaveFileDialog1.FileName, ListViewContent)


    es gibt ein fehler bei der letzten zeile. Das Objekt des Typs "System.String" kann nicht in Typ "System.Collections.Generic.IEnumerable`1[System.String]" umgewandelt werden.
    Du deklarierst ListViewContent ja auch als String ;)

    Wo soll denn da die Auflistung herkommen?
    Und String-Konkatenation erfolgt mit "&" nicht mit "+".


    Probier das mal:

    VB.NET-Quellcode

    1. Dim Lines As New Text.StringBuilder
    2. For Each Item As ListViewItem In Listview1.Items
    3. Lines.Append(Item.Text)
    4. Lines.Append("#"c)
    5. Lines.Append(String.Join("#", (From L In Item.SubItems.Cast(Of Windows.Forms.ListViewSubItem)() Select L.Text)))
    6. Lines.Append(Environment.NewLine)
    7. Next
    8. IO.File.WriteAllText("..", Lines.ToString())


    Liebe Grüße
    /nicht getestet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rotherford“ ()

    TRiViUM schrieb:

    VB.NET-Quellcode

    1. For I As Integer = "0" To ListView1.Items.Count - 1
    Gib Deinem Projekt schleunigst Option Strict On. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    AAh, Danke.

    Der 7. Beitrag war ein Edit, dass ich übersehen habe...

    Habe den Code wie folgt ergänzt/ umgeschrieben

    VB.NET-Quellcode

    1. SaveFileDialog1.ShowDialog()
    2. Dim lines As New StringBuilder
    3. For Each Item As ListViewItem In ListView1.Items
    4. Lines.Append(Item.Text)
    5. lines.Append("-"c)
    6. lines.Append(String.Join("-", (From L In Item.SubItems.Cast(Of Windows.Forms.ListViewItem.ListViewSubItem)() Select L.Text)))
    7. Lines.Append(Environment.NewLine)
    8. Next
    9. IO.File.WriteAllText(SaveFileDialog1.FileName, lines.ToString())


    so funktioniert es wunderbar :)

    Vielen dank :thumbsup:
    Trotz alledem ist das nur eine "Übergangslösung".
    Jedoch für den Anfang, wie ich finde, ist das Speichern von Daten in Textdokumenten ok.

    Später solltest du dich aber mit DataSet, Datenbanken und wie gesagt mit Serialisierung beschäftigen.
    Edit: Und mit dem #7 Beitrag meinte ich das Thema, welches ich als Link gegeben habe.

    Liebe Grüße
    /nicht getestet
    Also das ist jetzt der code, den ich verwende:

    VB.NET-Quellcode

    1. SaveFileDialog1.ShowDialog()
    2. SaveFileDialog1.InitialDirectory = Application.StartupPath & "\Data"
    3. Dim lines As New StringBuilder
    4. For Each Item As ListViewItem In ListView1.Items
    5. lines.Append(Item.Text)
    6. lines.Append("-"c)
    7. lines.Append(String.Join("-", (From L In Item.SubItems.Cast(Of Windows.Forms.ListViewItem.ListViewSubItem)() Select L.Text)))
    8. lines.Append(Environment.NewLine)
    9. Next
    10. IO.File.WriteAllText(SaveFileDialog1.FileName, lines.ToString())


    Ich habe festgestellt, dass wenn ich die datei lade, das erste item leer ist. und dem nach fehlt das letzte subitem.

    also ich schreibe folgendes in die listview: 1-2-3-4

    der code schreibt es so in die txt: 1-1-2-3

    Wieso 2x den ersten text ?

    ich bin verwirrt.
    Selbstverständlich :)

    VB.NET-Quellcode

    1. Using OpenFileDialog1
    2. OpenFileDialog1.InitialDirectory = Application.StartupPath & "\data"
    3. If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    4. Try
    5. Dim lines() As String = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)
    6. ListView1.Items.Clear()
    7. For Each line As String In lines
    8. Dim Split() As String = line.Split(CChar("-"))
    9. Dim NeueZeile As New ListViewItem(New String() {Split(0), Split(1), Split(2), Split(3)})
    10. ListView1.Items.Add(NeueZeile)
    11. Next
    12. ToolStripStatusLabel2.Text = OpenFileDialog1.SafeFileName
    13. Catch ex As Exception
    14. MsgBox("Fehler beim Laden der Listen-Datei.", MsgBoxStyle.Critical, "Datei laden" & vbNewLine & ex.Message)
    15. End Try
    16. End If
    17. End Using


    Das Problem bzw. das Komische ist, wenn ich es speichere, und mit nem editor öffne, siehts auch so aus: 1-1-2-3, anstatt 1-2-3-4.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TRiViUM“ ()

    Save knallt. Gib Deinem Projekt zunächst Option Strict On und beseitige die Fehler.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Option Strict ist ON.

    er hat mir nur beim splitchar was als fehler markiert. hab die autokorrektur benutzt :rolleyes:

    Ändert aber nix an dem ganzen, Problem bleibt. Ich weiß ja nich, wo es genau liegt.

    Aber mit "save knallt" meinste, das der save-code den bock schießt oder?

    bin grad am auseinanderpflücken...

    und nebenbei ne andere frage, zur zeile

    VB.NET-Quellcode

    1. For Each Item As ListViewItem In ListView1.Items
    2. lines.Append(Item.Text)
    3. lines.Append("-"c)
    4. lines.Append(String.Join("-", (From L In Item.SubItems.Cast(Of Windows.Forms.ListViewItem.ListViewSubItem)() Select L.Text)))
    5. lines.Append(Environment.NewLine)
    6. Next

    wozu steht das c nach dem splitchar?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TRiViUM“ ()