Speichern und Laden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Gespenst.

    Speichern und Laden

    Hallo Leute,

    ich habe ein kleines Problem und ich weiß nicht unbedingt wie ich das lösen kann. Ich habe eine Form mit 2x Combobox, 11 Textboxen und 1x Datagridview. Jetzt würde ich gerne diese Werte in eine CSV speichern und laden. Ich habe das schon so weit, dass ich die Textboxen speichern kann, aber nicht das Datagridview. Auch für das Laden habe ich keine Idee. Ich hoffe ihr könnt mir helfen.
    Hier mal mein Code zum speichern der Textboxen. Ich denke, der ist auch noch verbesserungswürdig, aber er funktioniert zumindest.

    VB.NET-Quellcode

    1. Sub SaveFileDialog()
    2. Dim sfd As New SaveFileDialog
    3. Dim txt As New TextBox
    4. Dim strFileName As String = String.Empty
    5. 'Set the Save dialog properties
    6. With sfd
    7. .DefaultExt = "csv"
    8. .Filter = "CSV Tabelle (*.csv)|*.csv|All Files (*.*)|*.*"
    9. .FilterIndex = 1
    10. .OverwritePrompt = True
    11. .Title = "Eingabedaten Speichern"
    12. End With
    13. 'Show the Save dialog and if the user clicks the Save button,
    14. 'save the file
    15. If sfd.ShowDialog = Windows.Forms.DialogResult.OK And sfd.FileName <> String.Empty Then
    16. Try
    17. 'Save the file path and name
    18. strFileName = sfd.FileName
    19. SaveFile(strFileName, CType(ComboBox3.SelectedItem, String) & vbNewLine &
    20. CType(ComboBox2.SelectedItem, String) & vbNewLine &
    21. TextBox1.Text & vbNewLine &
    22. TextBox2.Text & vbNewLine &
    23. TextBox4.Text & vbNewLine &
    24. TextBox5.Text & vbNewLine &
    25. TextBox6.Text & vbNewLine &
    26. TextBox7.Text & vbNewLine &
    27. TextBox8.Text & vbNewLine &
    28. TextBox9.Text & vbNewLine &
    29. TextBox10.Text & vbNewLine &
    30. TextBox11.Text)
    31. Catch ex As Exception
    32. MessageBox.Show(ex.Message, My.Application.Info.Title, _
    33. MessageBoxButtons.OK, MessageBoxIcon.Error)
    34. End Try
    35. End If
    36. End Sub
    37. Sub SaveFile(ByVal path As String, ByVal textToSave As String)
    38. Dim strmWriter As New System.IO.StreamWriter(path, False)
    39. strmWriter.Write(textToSave)
    40. strmWriter.Close()
    41. strmWriter.Dispose()
    42. End Sub


    Ich bin euch sehr dankbar für eure Hilfe.
    Ich würde garnicht unbedingt ein spezielles Format nehmen, sondern einfach eine ".txt" oder ".dat" nehmen. Dann würde ich einfach die Textboxen wie du es machst in die String schreiben. Für das View würde ich sowas machen wie

    VB.NET-Quellcode

    1. Dim Text as String ="#" & View(1) & ";" & View(2)
    Ich weiss grade nicht, wie man die Items aus der View bekommt, deshalb View(). Einfach den Code so schreiben, dass er Zeile für Zeile die Items vom View ausliest. Eine neue Zeile leitest du dann mit einem # ein, damit das Programm beim laden weiss, dass das zum View gehört. Die Items dann mit einem ; trennen, dann kannste sie beim Laden ganz einfach splitten.

    Fürs Laden, liest du dann einfach Zeile für Zeile die Datei aus, überprüfst ob die Zeile mit einem # beginnt und wenn dem so ist, splittest du einfach die Zeile mit

    VB.NET-Quellcode

    1. Dim Treffer() As String
    2. Dim text as String = "Ha;llo"
    3. Treffer = text.Split(";"c)

    Dann steht in Treffer(0) "Ha" und in Treffer(1) "llo". So würde ich das machen... Aber bitte verbessert mich^^ LG
    Hi,

    @ChOoSeMyNaMe zwei Anmerkungen:
    1. String.Format ist imo schöner, als wenn man direkt die ganzen Teile aneinanderreiht.
    2. Die Deklarierung des Arrays unten und die Initiaisierung kann man gleich zusammensetzen. ;)

    Generell sucht der TE jedoch eine Art der Datenverwaltung, da ist das leider etwas unangebracht.

    @Gespenst CType sollte man eig. immer meiden, da es bessere Wege der Konvertierung gibt, z. B. <Datentyp>.(Try)Parse oder Ähnliches. In diesem Fall reicht ToString oder (was mir persönlich besser gefällt) ComboBox.GetItemText. Die vbNewLine-Konstante würde ich mit Environment.NewLine ersetzen, ist schlauer, als ein einfaches \n überall, wofür die Konstante steht. SafeFileDialog implementiert btw IDispoable, deshalb solltest Du explizit Dispose aufrufen, wenn Du ihn nicht mehr brauchst oder einfach einen Using-Block verwenden. Dies gibt alle Ressourcen frei.

    Dir empfehle ich außerdem das:
    Daten laden, speichern, verarbeiten - einfachste Variante

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Danke schon mal für eure Antworten. Aber wie krieg ich das denn mit meinem Datagridview hin?
    Was das anbelangt nämlich anbelangt, habe ich nämlich keine große Ahnung, da ich noch nie wirklich mit speichern und laden gearbeitet habe.
    So wie du es anfängst kriegst dus nicht hin, oder nur mit unverhältnismäßigem Aufwand und miserablem Ergebnis.

    Es führt kein Weg drumrum, dass du dir ein typisiertes Dataset gestaltest, und daran TextBoxen und DGV bindest.
    Son Dataset abzuspeichern und zu laden ist einfach.
    Mit Links zum Thema hab ich dich ja bereits im anneren Thread versorgt.
    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!
    jo, evtl. kannst du damit kurzfristig dein Problem lösen, aber um den Preis erkauft, dass du damit in die untypisierte Dataset-Programmierung einsteigst, und Leuts, die sich das angewöhnen, kriegen das nur sehr schwer wieder raus aus der Birne.
    Langfristig musstes aber rauskriegen, denn für deine Datenverarbeitung musst du typisiert arbeiten, und mit typisiertem Dataset.