none
DGV gebunden + ungebundene Spalte mit Daten füllen RRS feed

  • Frage

  • Servus Experten

    Ich habe ein Datagridview an eine Datenquelle gebunden. Die Datenquelle gibt unter anderem zwei Felder zurück "Nr1" und "Nr2" die jeweils in einer eigenen Spalte angezeigt bzw aufgelistet werden, so weit so gut. Diese zwei Felder möchte ich aber gerne in einer Spalte zusammenfassen. Ich habe nun den DGV eine ungebundene Spalte "Nummer" hinzugefügt und versuche mit folgendem Code diese zu füllen:

            For Each Zeile As DataGridViewRow In MonarchDataGridview1.Rows
                Zeile.Cells("Nummer").Value = "(" & Zeile.Cells("Nr1").Value.ToString & "," & Zeile.Cells("Nr2").Value.ToString & ")"
            Next

    Das funzt aber nicht ... die Spalte bzw. Zellen bleiben leer ?

    Danke für Tipps ... mfg eem Monarch


    PS: Habe gerade festgestellt, das es funzt wenn ich warte bis die From geladen ist und den Code erst danach über ein Buttonevent ausführe. Also scheint der Code richtig zu sein, aber wo muss ich den Code hinschreiben, wenn das bereits beim Laden der Form automatisch haben möchte ? Habe es versuch am Ende von From_Load funzt leider nicht!
    Mittwoch, 15. Januar 2014 14:51

Antworten

  • Da ich das PS in deiner Frage erst jetzt gelesen habe, im Load-Event der Form funktioniert es bei mir. Das wird auch erst ausgeführt, wenn alles in der Form instanziert wurde. Angezeigt wird die Form aber erst nach Load.

    PS: Es funktioniert nur im Load Event, da du die Datenbindung wahrscheinlich im Designer gesetzt hast. Diese wird entspechend in InitialisizeComponent erstellt. Und spätestens vor dem Load-Event sind die Daten dann geladen. (Bei den Standardeinstellungen)


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.


    Mittwoch, 15. Januar 2014 16:08
    Moderator
  • Hallo,

    gebundene DataGridViews vertragen sich i. a. schlecht mit ungebundenen Spalten.

    Wenn der Ausdruck aus zwei Spalten zusammengesetzt ist, wäre der einfache Weg eine berechnete Spalte zu verwenden, siehe DataColumn.Expression

    Gruß Elmar

    • Als Antwort markiert Monarch-Falter Donnerstag, 16. Januar 2014 10:06
    Mittwoch, 15. Januar 2014 16:42
    Beantworter

Alle Antworten

  • Hallo,
    kann der Benutzer bei dir neue Zeilen hinzufügen? Wenn ja, dann enthält die letzte Zeile keine Informationen. Mit der IsNewRow-Eigenschaft kannst du das abprüfen:
    For Each Zeile As DataGridViewRow In DataGridView1.Rows
        If Not Zeile.IsNewRow Then
            Zeile.Cells("Nummer") = ...
    Du kannst aber auch im CellEndEdit-Event des DataGridViews die 3. Spalte aktualisieren:
    Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles MonarchDataGridview1.CellEndEdit
        If e.RowIndex < MonarchDataGridview1.Rows.Count - 1 Then 'Hinzufügen-Zeile auslassen
            If Not MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr1").Value Is Nothing And Not MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr2").Value Is Nothing Then 'Beide Spalten enthalten Daten
                MonarchDataGridview1.Rows(e.RowIndex).Cells("Nummer").Value = "(" & MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr1").Value.ToString & "," & MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr2").Value.ToString & ")" '3. Spalte entsprechend umformatieren
            End If
        End If
    End Sub
    Dadurch werden die Daten automatisch bei neuen Datensätzen aktualisiert. Ggf. kannst du auch die Visible-Eigenschaft der Nr*-Spalte auf False stellen um diese auszublenden.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Mittwoch, 15. Januar 2014 15:33
    Moderator
  • Servus

    das DGV ist eine reine Übersicht(kein bearbeiten möglich) und sollte wenn die Form angezeigt wird fix und fertig sein, und die Nr* spalten sind ausgeblendet=logisch :-)

    Ich habe jetzt folgendes gemacht: Zwar funzt es aber der Nachteil ist halt, dass die Spalte erst zur Laufzeit des DGV gefüllt wird .... was beim Scrollen doch etwas länger dauert.

        Private Sub MonarchDataGridview1_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles MonarchDataGridview1.RowPostPaint
            If MonarchDataGridview1.Rows(e.RowIndex).Cells("Nummer").Value <> "" Then Exit Sub
            MonarchDataGridview1.Rows(e.RowIndex).Cells("Nummer").Value = "(" & MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr1").Value.ToString & "," & MonarchDataGridview1.Rows(e.RowIndex).Cells("Nr2").Value.ToString & ")"
        End Sub


    Mittwoch, 15. Januar 2014 15:55
  • Da ich das PS in deiner Frage erst jetzt gelesen habe, im Load-Event der Form funktioniert es bei mir. Das wird auch erst ausgeführt, wenn alles in der Form instanziert wurde. Angezeigt wird die Form aber erst nach Load.

    PS: Es funktioniert nur im Load Event, da du die Datenbindung wahrscheinlich im Designer gesetzt hast. Diese wird entspechend in InitialisizeComponent erstellt. Und spätestens vor dem Load-Event sind die Daten dann geladen. (Bei den Standardeinstellungen)


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.


    Mittwoch, 15. Januar 2014 16:08
    Moderator
  • Hallo,

    gebundene DataGridViews vertragen sich i. a. schlecht mit ungebundenen Spalten.

    Wenn der Ausdruck aus zwei Spalten zusammengesetzt ist, wäre der einfache Weg eine berechnete Spalte zu verwenden, siehe DataColumn.Expression

    Gruß Elmar

    • Als Antwort markiert Monarch-Falter Donnerstag, 16. Januar 2014 10:06
    Mittwoch, 15. Januar 2014 16:42
    Beantworter
  • Hallo Elmar,

    ich benutze ein vorhandene View, da ich diese zwar ändern könnte aber nicht abschätzen kann, ob dadurch Seiteneffekte entstehen, habe ich jetzt eben ein neue View erstellt. Ich hoffte dies vermeiden zu können, da sich die beiden Views nur minimal unterscheiden.

    mfg eem monarch

    Mittwoch, 15. Januar 2014 21:27