Checkbox in Datagridview mit Datatable

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    Checkbox in Datagridview mit Datatable

    Hey,
    ich trage aus einer CSV Datei über einen Datatable Strings in ein Datagridview ein.
    Nun möchte ich noch einige Checkboxen hinzufügen.
    D.h. wenn in der CSV Datei z.B. ein ! steht soll eine Checkbox im Datagridview auf checked gesetzt werden..
    Hier mein bisherriger Code:

    VB.NET-Quellcode

    1. 'Laden der Kundendaten aus CSV Datei
    2. Const DATEINAME As String = "C:\Users\******\kundendaten.txt"
    3. Const TRENNZEICHEN As Char = "|"
    4. Dim Felder() As String
    5. Dim Zeile As String
    6. Dim dt = New DataTable()
    7. Dim streamreader = My.Computer.FileSystem.OpenTextFileReader(DATEINAME, System.Text.Encoding.Default)
    8. ' Spalten Überschriften hinzufügen
    9. With dt.Columns
    10. .Add("KdNr.")
    11. .Add("Kunde")
    12. .Add("Adresse")
    13. .Add("PLZ")
    14. .Add("Ort")
    15. .Add("Telefon")
    16. .Add("E-Mail")
    17. .Add("Test")
    18. End With
    19. Do While (streamreader.Peek > -1) ' Dateiende abfragen
    20. Zeile = streamreader.ReadLine ' Eine Datenzeile lesen
    21. Felder = Zeile.Split(TRENNZEICHEN) ' Splitten in Felder
    22. Dim dr As DataRow = dt.NewRow ' Leere Datenzeile erstellen
    23. dr.ItemArray = Felder ' In DataRow speichern
    24. dt.Rows.Add(dr) ' Felder zur Datatable hinzufügen
    25. DataGridView.DataSource = dt ' DataTable in DataGridView zeigen
    26. Loop
    Ich würde die entsprechende Spalte als Boolean definieren und beim Import den Wert für diese Spalte prüfen, dann nach Boolean konvierten und der Spalte zuweisen.
    Datentyp einer Spalte kannst Du so definieren:

    VB.NET-Quellcode

    1. With dt.Columns
    2. ' ...
    3. .Add("Ja/Nein", GetType(Boolean))
    4. ' ...
    5. End With


    Importieren könnte ungefähr so aussehen:

    VB.NET-Quellcode

    1. For Each zeile As String In IO.File.ReadAllLines("MeineQuelle.csv")
    2. Dim zellen() As String = zeile.Split(";"c)
    3. Dim dtZeile As DataRow = dt.NewRow
    4. For spaltenIndex As Integer = 0 To 10 'zellen.Length - 1
    5. Select Case spaltenIndex
    6. Case Is = 2, 4, 5 ' Boolean-Spalten
    7. If zellen(spaltenIndex).Trim.ToUpper = "WAHR" Then
    8. dtZeile(spaltenIndex) = True
    9. Else
    10. dtZeile(spaltenIndex) = False
    11. End If
    12. Case Else
    13. dtZeile(spaltenIndex) = zellen(spaltenIndex)
    14. End Select
    15. dt.Rows.Add(dtZeile)
    16. Next
    17. Next
    Ja eine Checkbox kann ich damit hinzufügen...
    Aber wie sage ich jetzt, dass wenn in der CSV Datei ein Zeichen steht das er dann die Checkbock checked sein soll?

    Meine CSV Datei sieht zb so aus:

    a|a|a|a|a|a|a|1
    b|b|b|b|b|b|b|2
    Die a's werden in die Strings eingetragen, das Funktioniert auch.
    Nur wie mache ich es, dass wenn da eine 1 steht die Checkbox checked ist und bei einer 2 die Checkbox nicht checked ist.?!
    Ich glaube, dass ich da mit deinem Code nicht weiterkomme...
    Aber Danke schonmal!

    edit:


    Habs hinbekommen Danke :)

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

    In Deinem Code weist Du eine eingelese Zeile komplett als Array einer Zeile in DataTable zu

    VB.NET-Quellcode

    1. dr.ItemArray = Felder

    Um die Werte einzelner Zelle einer Zeile beeinflußen zu können, musst Du in jeder Zeile Zelle für Zelle durchgehen und fragen: welchen Datentyp hat diese Spalte in der DataTable? und wie der Wert aus der CSV-Datei? Lässt sich der Wert aus der CSV-Datei ohne Weiteres in die entsprechende Spalte in der DataTable hinzufügen? Wenn nicht, was muss ich tun, damit der Wert richtig in die DataTable importiert werden kann.

    In meinem Beispiel (wie leider bei mir üblich: ohne Code-Kommentar)
    - durchlaufe ich die Zellen mit Hilfe der Variablen spaltenIndex von 0 bis 10 (also 11 Spalten).
    - Mit Select Case frage ich ab, in welche Spalte ich mich momentan befinde.
    - Wenn der spaltenIndex = 2, 4 oder 5 (also Spalte-Nr 3, 5 und 6 - spaltenIndex startet bei 0)
    +-> Prüfe den Wert aus der CSV-Datei
    +---> Wenn der Wert = "WAHR"
    +------> Setze den Wert in DataTable auf True, andernfalls auf False
    - Bei allen anderen Spalten einfach den Wert aus CSV-Datei übernehmen

    Hoffe, es ist einigermaße verständlich.