DGV-Zeilenfärbung nach Sortierung

  • VB.NET
  • .NET 4.0

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

    DGV-Zeilenfärbung nach Sortierung

    'n Abend!

    Wenn ich ein DGV fülle, färbe ich die Zeilen anschließend mit

    VB.NET-Quellcode

    1. For i As Integer = 0 To dgv.RowCount - 1
    2. If dgv.rows(i).cells(0).value> 10 Then
    3. dg.Rows(i).DefaultCellStyle.BackColor = Color.Red
    4. ElseIf dgv.rows(i).cells(0).value > 4 Then
    5. dgv.Rows(i).DefaultCellStyle.BackColor = Color.Yellow
    6. End If
    7. Next

    ein. Soweit, so gut

    Wenn ich das DGV aber durch Klick auf einen Spaltenkopf sortiere, soll die Färbung erhalten / erneuert werden. Also habe ich

    VB.NET-Quellcode

    1. Private Sub dgv_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellClick
    2. If dgv.rows(i).cells(0).value> 10 Then
    3. dg.Rows(i).DefaultCellStyle.BackColor = Color.Red
    4. ElseIf dgv.rows(i).cells(0).value > 4 Then
    5. dgv.Rows(i).DefaultCellStyle.BackColor = Color.Yellow
    6. End If
    7. Next
    8. End Sub


    eingefügt. Die Schleife wird auch durchlaufen und die Bedingungen fürs Einfärben erfüllt, einzig sind alle Zeilen im Anschluss weiß. Es gibt keine anderen Subs, die dazwischen funken.

    Sieht jemand den Fehler oder kennt eine elegantere Methode?


    :?: Vielfrager
    @vielfrager Mach das ganze mal im Validating-Event.
    Und implementiere noch den Else-Zweig, man weiß ja nie...
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @vielfrager
    Das CellPainting-Ereignis tritt auf, wenn die Zelle gezeichnet werden muss...
    msdn.microsoft.com/de-de/libra…llpainting(v=vs.110).aspx
    Es gibt hier im Forum sogar ein Tutorial dazu von @ErfinderDesRades
    coloriertes DatagridView

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

    @vielfrager Hier mal ein ganz einfaches Beispiel:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    2. If e.Value Is Nothing Then
    3. Return ' Zelle leer
    4. End If
    5. Dim content = e.Value.ToString
    6. If Not String.IsNullOrEmpty(content) Then ' wenn Text vorhanden
    7. Dim style = e.CellStyle
    8. style.ForeColor = Color.Red ' dann rot
    9. style.Font = New Font(Me.Font, Me.Font.Style Or FontStyle.Bold) ' und Bold
    10. e.CellStyle = style
    11. End If
    12. End Sub

    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Danke RodfromGermany, aber ich hab da wohl einen ?( Speicherüberlauf ?(

    Ich weiß nicht, wie ich mit Deinem Beispiel die Zeilen des DGV abhängig vom Wert einer bestimmten Zelle einfärben kann.
    Wie geschrieben ist die Färbung mit dem ersten Teil meines Codes ja erfolgreich (wenn auch programmiertechnisch vemutlich nicht sauber?), nur bei dem zweiten Teil des Codes klappt es nicht. Die IF-Bedingung wird erfüllt, aber das DGV bleibt weiß.

    PS Der zweite Teil meines Codes war unvollständig einkopiert, es fehlte der obere Teil der Schleife:

    VB.NET-Quellcode

    1. Private Sub dgv_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellClick
    2. For i as Integer = 0 to dgv.rowcount - 1
    3. If dgv.rows(i).cells(0).value> 10 Then
    4. dg.Rows(i).DefaultCellStyle.BackColor = Color.Red
    5. ElseIf dgv.rows(i).cells(0).value > 4 Then
    6. dgv.Rows(i).DefaultCellStyle.BackColor = Color.Yellow
    7. End If
    8. Next
    9. End Sub

    vielfrager schrieb:

    Ich weiß nicht, wie ich mit Deinem Beispiel die Zeilen des DGV abhängig vom Wert einer bestimmten Zelle einfärben kann.
    Das Beispiel tut es. :thumbsup:
    Mach Dir eine neue Form mit einem DGV und 3 Spalten drauf, kopiere meinen Code in die Form und feddich.
    Verstehe Post #3 von @VB1963.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    ?( Ja, es tut sich was. Aber zuviel des Guten:
    Alle Zellen, die Text enthalten, sind nun in roter Schrift ausgefüllt.
    Die Aufgabe war aber, einer Zeile eine bestimmte Hintergrundfarbe zu geben, wenn der Wert in einer definierten Zelle eine bestimmte Größe hat (hier eine Zahl in Zelle 0 - ist sie größer, sollte die Hintergundfarbe rot sein). ?(

    vielfrager schrieb:

    wenn der Wert in einer definierten Zelle eine bestimmte Größe hat
    Ja und?
    Nimm meinen Code und implementiere genau diese Deine Bedingung.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!