CSV-Datei in datengebundenes DatGridView

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

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    CSV-Datei in datengebundenes DatGridView

    Hallo,

    ich habe folgendes Problem, ich habe ein datengebundenes DataGridView als Anzeige. Dort werden Datensätze aus einer Access-Datenbank gespeichert. Nun möchte ich eine Funktion einbauen, mit der es möglich ist, dem DataGridView/der Datenbank eine CSV-Datei als neuen Datensatz hinzuzufügen.

    Ich habe bereits folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim fName As String = ""
    3. OpenFileDialog1.InitialDirectory = "c:\desktop"
    4. OpenFileDialog1.Filter = "CSV files(*.csv)|*.csv"
    5. OpenFileDialog1.FilterIndex = 2
    6. OpenFileDialog1.RestoreDirectory = True
    7. If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
    8. fName = OpenFileDialog1.FileName
    9. End If
    10. Dim TextLine As String = ""
    11. Dim SplitLine() As String
    12. If System.IO.File.Exists(fName) = True Then
    13. Dim objReader As New System.IO.StreamReader(fName)
    14. Do While objReader.Peek() <> -1
    15. TextLine = objReader.ReadLine()
    16. SplitLine = Split(TextLine, ";")
    17. MahnungstoolDataSet.Tabelle1.AddTabelle1Row(SplitLine)
    18. Loop
    19. Else
    20. MsgBox("File Does Not Exist")
    21. End If
    22. End Sub


    es erscheint die Fehlermeldung, dass

    VB.NET-Quellcode

    1. MahnungstoolDataSet.Tabelle1.AddTabelle1Row(SplitLine)
    nicht möglich ist, da es nicht in String konvertiert werden kann.
    Danke für die Antwort.

    Wie übergebe ich genau das Element zu einem String?

    Edit:
    Mit

    VB.NET-Quellcode

    1. For Each Wert As String In SplitLine
    2. MsgBox(Wert)
    3. Next Wert

    zeigt es mir alle Einträge aber ich habe bisher noch nicht geschafft diese werte in das Dgv/datenbank zu speichern

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

    @uNbRaKe

    Wie @petaod dir schon gesagt hat, splittet die Split-Methode einen String in ein String-Array. Also mehrere Strings.

    Du gibst dieses Array mit. Leider braucht deine Methode einen String.

    In ​SplitLine sind alle Teile des Textes drin, aber aufgeteilt. Jenachdem was du aus dem String brauchst, musst du das gewisse Element aus dem Array mitgeben.

    Beispiele:
    Du brauchst das 1. Element. Dein Parameter sieht also so aus: ​SplitLine(0)

    Ich weiss nicht, wie viele Semikolons im Text sind, sind es nur 2, ist es einfach. Nimm das gleiche wie oben, aber anstatt 0 eine 1.
    Sonst zählst du mit ​Count() die Anzahl Elemente und schreibst diese Zahl hinten in die Klammer. Vergiss bei dieser Variante nicht, dass du noch diese Zahl - 1 rechnen musst.


    Also wie du siehst, kommt es darauf an, wie die Strings aufgebaut sind. Immer gleich oder unterschiedlich?

    Dann musst du dich fragen, welchen Teil brauchst vom String. Den 1. Teil oder den Mittleren oder etwas anderes?

    Bitte antworte auf meine Frage und dann können wir einfacher antworten
    Ich weiss ja nicht, was AddTabelle1Row genau macht und wie es definiert ist.
    Syntaktisch sieht es für mich irgendwie nach typisiertem Dataset aus, das intern ein DataTable.Rows.Add ausführt.
    Dieses Add benötigt aber keinen String, sondern eine DataRow.

    Vielleicht kann mal ein tDS-Spezialist darüber nachdenken.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Ich arbeite auch ein bisschen mit DataSets. Ich denke selber über die Add-Methode, dass er es selber gemacht hatte. Du hast aber recht, man sollte eine Row mitgeben, aber er kann nachher noch mehr Parameter mitgeben. Man müsste nur seine Query kennen, um sicher zu gehen.

    uNbRaKe schrieb:

    Werte in der CSV-Datei ... sollen in das DGV geladen werden und dann in der Datenbank angespeichert
    Also eine CSV in eine DataTable importieren, die an ein DGV gebunden ist.
    Sowas:
    stackoverflow.com/questions/11…ta-to-datatable-in-vb-net
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @uNbRaKe Wenn das das einzige ist, wieso splittest du den String überhaupt. Du kannst doch einfach die Semikolons aus dem String entfernen und dann hast du deinen String.

    Zeig sonst mal deinen Rückgabewert mit den Semikolon und was du in die Tabelle speichern möchtest.
    @uNbRaKe

    Such das Semikolon im String, nimm die Position und lösche die Position.

    Mach doch zuerst eine Row mit allen Werten, die du rein speichern möchtest. Dann Adde nur die Row. Keinen String.

    Beispiel vom hinzufügen einer neuen Row:

    VB.NET-Quellcode

    1. Dim taWettbewerb As New AuslosungDataSetTableAdapters.WettbewerbTableAdapter
    2. Dim dtWettbewerb As New AuslosungDataSet.WettbewerbDataTable
    3. taWettbewerb.ClearBeforeFill = True
    4. taWettbewerb.FillByName(dtWettbewerb, txtName.Text)
    5. Dim dtNewRwEinstellungen As AuslosungDataSet.EinstellungenRow = dtEinstellungen.NewRow
    6. With dtNewRwEinstellungen
    7. .AnzahlGruppen = 1
    8. .AnzahlTeilnehmerInGruppe = 1
    9. .IsGruppenphase = 0
    10. .IsKORunde = 0
    11. .AnzahlWeiterkommendeTeilnehmerProGruppe = 1
    12. End With
    13. dtEinstellungen.Rows.Add(dtNewRwEinstellungen)

    uNbRaKe schrieb:

    MahnungstoolDataSet.Tabelle1.AddTabelle1Row(SplitLine)
    Das ist eine normale tDS(typisiertes DataSet)-Befehlszeile. Also kommt hier ein tDS zum Einsatz. Ohne weitere Eigenbauten. Dass die Tabelle Tabelle1 heißt, ist suboptimal, aber mal nicht das Problem. Die Add-Methode einer tDS-DataTable nimmt entweder eine DataRow oder die einzelnen Spaltenwerte für diese Tabellenzeile. Hat man also eine Tabelle mit folgenden Spalten:
    (Bezeichnung)
    ID
    Name
    Geburtsdatum
    (Typ)
    Integer
    String
    Date

    dann kann man alternativ eben auch in dieser Reihenfolge die gewünschten Parameter übergeben, also tDS.Tabelle1.AddTabelle1Row(-1, "Klaus Kleister", #02/02/1972#)
    Da eine tDS-DataTable aber kein String-Array als Parameter akzeptiert, da man ein solches nicht als Spaltentyp festlegen kann, geht das mit dem MahnungstoolDataSet.Tabelle1.AddTabelle1Row(SplitLine) in die Hose. Um da weiterzuhelfen, müssten wir wissen, welche Spalten es in Tabelle1 gibt und von welchem Typ die sind.

    uNbRaKe schrieb:

    Wie entferne ich denn die Semikolons?

    VB.NET-Quellcode

    1. Dim DeinTextOhneSemikolon = DeinTextMitSemikolon.Replace(";", " ")

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.