Abspeichern von Daten(DataGridView)

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Abspeichern von Daten(DataGridView)

    Hi.
    ich brauche dringend Hilfe, beim Abspeichern von Daten. Ich habe mittlerweile ein Programm geschrieben was mir sehr viele dinge berechnet. Diese Ergebnisse sind dann in Variabeln gespeichert, außßerdem lasse ich mir die Ergebnisse in einem DataGridView anzeigen. Jetzt habe ich das Problem das beim schließen des Projekts alle Werte Verloren gehen.
    Ich habe schon danach gegoogelt und in ein paar büchern gestöbert und habe gelesen das man sich die Ergebnisse, die ja nun in einem DataGridView drin stehen per DataSet irgendiwe abspeichern kann, allerdings Unterbricht der Complier mit dem Fehler:"Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist."
    Hat da jemand Lösungsvorschläge?
    Vielen Dank im vorraus
    Gruß Kevik
    Wenn du Daten in eine DataGridView bearbeitest kommt es darauf an wie die Daten in die DataGridView gekommen sind.

    1.) Daten über DataSet laden und in die DataGridView übergeben bedeutet auch die Daten in der DataSet ändern und über DataSet wieder speichern.

    2.) Daten in der DataGridWiewmanuell bearbeiten, ändern ... und so weiter. Mann kann die DAten dann auch manuell auslesen und Speichern
    z.B. mit XML, CSV, Txt usw....

    was hast du vor und um wieviele Daten handelt es sich ca. Woher kommen die Daten ?
    Puuuhhh das ich jetzt gerade kompliziert zu beschreiben.
    Also ich lasse mir Werte per Schleife ausrechnen, die ich dann in "Double" Variabeln abspeichere und gebe sie dann Per DGV aus. Es handelt sich alles in allem um ca. 100 Werte.

    Dim a As Double = Textbox1.Text
    Dim zahl(51) As Double
    Do Until n >=50
    n = n+1
    a/n
    zahl(n) = a/n

    If Len(zahl(n))<=2 Then
    DGV1.Rows.Add(n, zahl(n))
    End If
    Loop

    Also das ist jetzt eine kleines Beispiel davon wie ich die Daten in den DGV reinschreibe.
    ich hatte mal ein ähnliches projekt und habe mir 2 funktionen geschrieben, die das DGV als tabelle in eine html-datei speichern bzw. aus dieser laden.

    fand ich persönlich eine gute lösung, weil man so die daten auch ohne das entsprechende programm ansehen kann.

    muss das ding nur eben finden, dann kann ich die beiden funktionen ja posten, wenn du willst.
    @ lordknoblauch Ja das wäre super.
    @ChaosBernd: Ich hab in deine Ablage geschaut und habe das hier gefunden.
    Jedoch funktioniert das Abspeichern nicht.
    Public Class Form1
    Dim xmldatadoc As Xml.XmlDataDocument
    #Region "XML Document"
    ' Laden
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    xmldatadoc = New Xml.XmlDataDocument
    xmldatadoc.DataSet.ReadXml("H:\Test.xml") ' hier wird das DataSet direk über XML Read geladen
    DataGridView2.DataSource = xmldatadoc.DataSet.Tables(0)
    End Sub
    ' Speichern
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    xmldatadoc.DataSet.WriteXml("H:\Test.xml")
    End Sub
    #End Region
    End Class

    Der Part mit dem die Datei geladen wird, der interessiert mich doch erstmal garnicht. Vorerst will ich nur die Ergebnisse aus dem DGV abspeichern.
    in der hoffnung, dass mir keiner was antut, poste ich mal meinen code (ich war jung und ahnungslos... ;( ) ^^

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub DataGridViewToHTML(ByVal grdView As DataGridView, Optional ByVal StandardName As String = "")
    2. 'speicher-dialog
    3. Dim filesave As SaveFileDialog = New SaveFileDialog
    4. filesave.AddExtension = True
    5. filesave.Filter = "HTML-Dateien (*.html)|*.html"
    6. filesave.FileName = StandardName
    7. If filesave.ShowDialog = DialogResult.OK Then
    8. 'tabelle anfangen
    9. Dim sw As New IO.StreamWriter(filesave.FileName, False)
    10. sw.WriteLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 transitional//DE"">")
    11. sw.WriteLine("")
    12. sw.WriteLine("<body bgcolor=""#c0c0c0"">")
    13. sw.WriteLine("<table border=""1"">")
    14. 'spaltenbezeichnung anlegen
    15. sw.WriteLine("<tr>")
    16. For j As Integer = 0 To grdView.ColumnCount - 1
    17. sw.Write("<td><b>")
    18. Dim celltext As String = grdView.Columns.Item(j).HeaderText
    19. If celltext = vbNullString Then celltext = ""
    20. sw.Write(celltext)
    21. sw.WriteLine("</b></td>")
    22. Next
    23. sw.WriteLine("</tr>")
    24. sw.WriteLine("")
    25. 'zellen füllen
    26. For i As Integer = 0 To grdView.RowCount - 1
    27. sw.WriteLine("<tr>")
    28. For j As Integer = 0 To grdView.Columns.Count - 1
    29. sw.Write("<td>")
    30. Dim celltext As String = grdView.Item(j, i).Value
    31. If celltext = vbNullString Then celltext = ""
    32. sw.Write(celltext)
    33. sw.WriteLine("</td>")
    34. Next
    35. sw.WriteLine("</tr>")
    36. sw.WriteLine("")
    37. Next
    38. 'tabelle schließen
    39. sw.WriteLine("</table></body>")
    40. sw.Close()
    41. End If
    42. End Sub


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub HTMLToDatagridview(ByVal DG As DataGridView, Optional ByVal StandardName As String = "")
    2. 'laden-dialog
    3. Dim loadfile As OpenFileDialog = New OpenFileDialog
    4. loadfile.AddExtension = True
    5. loadfile.Filter = "HTML-Dateien (*.html)|*.html"
    6. loadfile.FileName = StandardName
    7. If loadfile.ShowDialog = DialogResult.OK Then
    8. Dim sr1 As New IO.StreamReader(loadfile.FileName)
    9. Dim StrAll As String = ""
    10. Dim strpart As String = ""
    11. Dim firstrun As Boolean = True
    12. Dim i As Integer = 0
    13. Dim j As Integer = 0
    14. 'ermitteln der row.count
    15. Dim rowcount As Integer = 0
    16. Do While (sr1.Peek() <> -1)
    17. StrAll = sr1.ReadLine
    18. If StrAll.Equals("</tr>") Then
    19. rowcount += 1
    20. End If
    21. Loop
    22. 'rows anlegen
    23. For x As Integer = 0 To rowcount - 3
    24. DG.Rows.Add()
    25. Next
    26. sr1.Close()
    27. 'rows füllen
    28. Dim sr2 As New IO.StreamReader(loadfile.FileName)
    29. Try
    30. Do While (sr2.Peek() <> -1)
    31. If firstrun Then
    32. StrAll = sr2.ReadLine()
    33. If StrAll.Contains("</tr>") Then
    34. firstrun = False
    35. End If
    36. Else
    37. StrAll = sr2.ReadLine()
    38. If StrAll.Contains("<td>") Then
    39. If Not StrAll.Equals("<td></td>") Then
    40. strpart = StrAll.Substring(4, StrAll.Length - 9)
    41. DG.Item(i, j).Value = strpart
    42. End If
    43. i += 1
    44. ElseIf StrAll.Contains("</tr>") Then
    45. j += 1
    46. i = 0
    47. End If
    48. If StrAll = "</table>" Then
    49. Exit Do
    50. End If
    51. End If
    52. Loop
    53. Catch ex As ArgumentOutOfRangeException
    54. MessageBox.Show(ex.Message)
    55. End Try
    56. sr2.Close()
    57. End If
    58. End Sub


    zwar peinlich, aber sollte funktionieren 8o
    Gib dem DGV eine DataTable als DataSource.
    Dieser Tabelle weise Spalten mit Deinen Datentypen zu (Integer, String, ...).
    Diese DataTable kannst Du per SaveXML(PFAD) und LoadXML(PFAD) easy handeln.
    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!
    Hallo, ich habe mal den Obigen Code abgeändert und in mein Projekt "importiert"

    nun erscheint der Fehler:

    Ungültige Konvertierung von Typ DBNull in Typ String.

    in der zeile:
    Dim celltext As String = LieferantDataGridView.Item(j, i).Value