Datagridview Row Back Color

  • VB.NET

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

    Datagridview Row Back Color

    Hallo,

    ich hab mich die letzten Tag mit dem Datagridview auseinander gesetzt, leider noch nicht sehr weit gekommen.
    Mein Problem ist es folgendes;

    Ich möchte in der Spalte "Auftrag" das Item mit rechts Anklicken worauf das ContextMenuStrip erscheint.
    Wenn ich jetzt auf Start Klick möchte ich das in der Selbe Zeile die spalte "Status" die Back Color Gelb bekommt.

    Könnt Ihr mir weiter helfen?

    Vielen Dank
    Bilder
    • Unbenannt.png

      13,58 kB, 467×274, 261 mal angesehen

    mox schrieb:

    mygridview.Columns[0].DefaultCellStyle.ForeColor = Color.Yellow


    geht leider nicht :/

    VB.NET-Quellcode

    1. Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem.Click
    2. DataGridView1.Columns[0].DefaultCellStyle.ForeColor = Color.Yellow
    3. End Sub


    Fehler 1 Eigenschaftenzugriff muss der Eigenschaft zugewiesen werden oder deren Wert verwenden.
    Fehler 2 Bezeichner erwartet.
    @Pixxxas: Ehm ... nicht nur copy&paste, sondern auch mal drüber schauen, was da kopiert wird. Die eckigen Klammern müssen runde Klammern sein: DataGridView1.Columns(0).DefaultCellStyle.ForeColor
    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.
    *sigh*
    In Deinem ContextMenu_Click-EventHandler (der Prozedur, in der Du auf den Klick auf die Start-Zeile in Deinem Kontextmenü reagierst), könntest Du z.B. folgendes reinschreiben (unter der Bedingung, dass Dein DatagridView tatsächlich noch auf den Namen DatagridView1 hört):

    VB.NET-Quellcode

    1. If DataGridView1.SelectedCells.Count = 0 Then Exit Sub
    2. Dim actualRowIndex = DataGridView1.SelectedCells(0).RowIndex 'Zeile der aktuell gewählten Zelle merken
    3. DataGridView1.Rows(actualRowIndex).Cells(0).Style.BackColor = Color.Aqua 'Hintergrundfarbe der Zelle ändern, die in der selben Zeile wie die gewählte ist und in der ersten Spalte steht


    Man möge mir die redundanten Code-Kommentare nachsehen, aber für den Fall, dass jemand auf diesen Post stößt und ihn nicht versteht ...
    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.
    EDIT: Sorry - ich habe das mit dem Kontextmenü überlesen gehabt ;( (war schon spät...)

    Pixxxas schrieb:

    könntest du mir das genauer Erklären? oder ein kleines Beispiel Projekt machen?

    Unten der neu überarbeitete Code

    VB.NET-Quellcode

    1. Private BackColorBrush As New SolidBrush(Color.Transparent)
    2. Private Sub DGV_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    3. 'nur bei gültigen Zellen ist die erste Spalte erlaubt und die Zeile muss die aktive Zeile des DGV sein
    4. If cell IsNot Nothing AndAlso start AndAlso e.ColumnIndex = 0 AndAlso cell.RowIndex = e.RowIndex Then
    5. BackColorBrush.Color = Color.Red 'Ja: Farbe Rot
    6. Else
    7. BackColorBrush.Color = Color.White 'Nein: Standardfarbe
    8. End If
    9. e.Graphics.FillRectangle(BackColorBrush, e.CellBounds) 'die Zelle wird mit der Farbe ausgefüllt
    10. e.Paint(e.CellBounds, DataGridViewPaintParts.All Xor DataGridViewPaintParts.Background) 'der Malvorgang wird durchgeführt
    11. e.Handled = True ' dem DGV den fertigen Malvorgang mitteilen
    12. End Sub
    13. Dim cell As DataGridViewCell 'aktive Zelle im DGV
    14. Dim start As Boolean 'Flag für's malen zulassen
    15. Private Sub DGV_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
    16. cell = Nothing
    17. start = False
    18. DirectCast(sender, DataGridView).Invalidate() 'neu malen lassen
    19. End Sub
    20. Private Sub DGV_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseUp
    21. If e.Button = Windows.Forms.MouseButtons.Right Then ' rechte Maustaste gedrückt?
    22. cell = DirectCast(sender, DataGridView)(e.ColumnIndex, e.RowIndex) 'aktive Zelle des DGV merken
    23. End If
    24. End Sub
    25. Private Sub ContextMenuStrip_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
    26. start = True ' Malen zulassen
    27. DataGridView1.InvalidateCell(cell) 'neu malen lassen
    28. End Sub
    ...ist jetzt getestet!
    Genaueres über das CellPainting-Event siehe hier von @ErfinderDesRades

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