leere Zellen in Spalte zu DataGridView hinzufügen

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    leere Zellen in Spalte zu DataGridView hinzufügen

    Hallo,

    ich benötige bitte etwas Hilfe bei einem kleinen Projekt.

    Ich muss immer wieder Excel Listen zusammenführen, die unterschiedliche Mengen an Zellen aufweisen. Beide Listen haben jeweils eine ID und einen Namen der übereinstimmen kann.

    Ich lese beide Listen in ein DatagridView ein. Die 2. Liste enthält immer weniger Zellen als die erste, daher muss ich in manchen Reihen auch leere Zellen einfügen.

    Folgender Code funktioniert:

    VB.NET-Quellcode

    1. Dim updateRow() As Data.DataRow
    2. ' wenn daten in umsatz schon vorhanden dann update der zellen
    3. For Each row As DataGridViewRow In dgvBoni.Rows
    4. updateRow = DtSet3.Tables(0).Select("" & dgvBoni.Columns(0).HeaderText & " = '" & row.Cells("" & dgvBoni.Columns(0).HeaderText & "").Value & "'")
    5. If (updateRow.Length > 0) Then
    6. Dim m As Integer
    7. For m = 2 To dgvBoni.Columns.Count - 1
    8. updateRow(0)(dgvBoni.Columns(m).HeaderText) = row.Cells(dgvBoni.Columns(m).HeaderText).Value
    9. Next
    10. ' wenn daten in Umsatz nicht vorhanden muss eine neue row hinzugefügt werden
    11. Else
    12. DtSet3.Tables(0).Rows.Add(New String() {row.Cells(dgvBoni.Columns(0).HeaderText).Value, row.Cells(dgvBoni.Columns(1).HeaderText).Value})
    13. End If
    14. Next


    Jetzt müsste ich im Else Block leere Zellen einfügen, was ich nicht hinbekomme.

    VB.NET-Quellcode

    1. Else
    2. DtSet3.Tables(0).Rows.Add(New String() {row.Cells(dgvBoni.Columns(0).HeaderText).Value, row.Cells(dgvBoni.Columns(1).HeaderText).Value, leereZelle, leereZelle, row.Cells(dgvBoni.Columns(2).HeaderText).Value})
    3. End If


    Danke!

    benk schrieb:

    was ich nicht hinbekomme
    Wie äußert sich das?
    Fehlermeldung?
    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!
    Probier doch in die Lücken reinzuschreiben: Nothing oder "" oder String.Empty, also überall dort, wo Du jetzt leereZelle stehen hast.

    ##########

    @benk: Warum ist der Titel eigentlich auf englisch? Bitte ggf. abändern.
    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.

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

    Überleg dir ein Datenmodell das alle Daten beinhaltet. Schreibe dir dann die passende Klasse dazu. Dem Konstruktor selbiger kannst du dann eine DataRow übergeben und damit dort dann deine Daten den Propertys zuweisen.

    Dann packst du alles in eine List( Of DeineKlasse) welche du wiederum dem DataGridView als datasource gibst.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    An selber Stelle? Kann nicht sein, da "" und String.Empty ungleich DBNull sind. Bitte mehr Informationen bzw. die entsprechende Codezeile posten.
    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.
    Die Lösung sieht bei mir so aus:

    Ich muss zuerst jeden Wert des gelesenen DataGridViews auf IsDBNull checken und davon abhängig verwenden oder nicht, da dieser Fehler nur auftritt wenn das dgv keine Werte in den Zellen enthält

    VB.NET-Quellcode

    1. Dim InsertEins As String
    2. If Not IsDBNull(row.Cells(dgvBoni.Columns(2).HeaderText).Value) Then
    3. InsertEins = row.Cells(dgvBoni.Columns(2).HeaderText).Value
    4. Else
    5. InsertEins = String.Empty
    6. End If


    Und dann entsprechend in der Einfüge Anweisung verwenden

    VB.NET-Quellcode

    1. DtSet3.Tables(0).Rows.Add(New String() {InsertEins, usw.})


    Ich hoffe das hilft mal jemand mit dem selben Problem

    benk schrieb:

    Ich hoffe das hilft mal jemand mit dem selben Problem
    Ich hoffe, dass es nicht soweit kommt, dass jemand es so probiert. Allein die Tatsache, dass Du in ein DGV schreibst und mit diesen DGV-Werten eine DataTable befüllst, ist Pfeil-Rücken-Brust-Auge. Die Daten sollten direkt in ne DataTable geschrieben werden und das DGV wird nur zum Anzeigen des DataTable-Inhalts verwendet.
    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.

    VaporiZed schrieb:

    Die Daten sollten direkt in ne DataTable geschrieben werden und das DGV wird nur zum Anzeigen des DataTable-Inhalts verwendet.


    Ja, aber @mrMo hatte hier bereits einen anderen Weg (als Datatable) vorgeschlagen, der ja auch korrekt ist. Beide Wege führen nach Rom, Datatable ist unter Winforms der einfachste und wird hier auch super unterstützt, während @mrMo s Vorschlag sich für WPF besonders, aber halt auch für WinForm eignet.