DataGridView Zeilenfarbe ändern

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

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Kasi.

    In Post 15 (CellFormatting) muss ich ja eine Anbindung an mein DGV machen. Wie mache ich das in der Sub-Zeile? Im Moment habe ich da ein Brett vor dem Kopf.
    Handles ....
    Meine Form heißt NM_Ahnen
    mein DGV = dgv_Geschwister

    die Handles-Klausel erfordert eine WithEvents-Variable
    Im Designer einfach das DataGridView Control anklicken und in dessen Eigenschaften unter Ereignisse per Doppelklick das gewünschte Event abonnieren.
    "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
    OK - Danke.
    Habe ich gerade eingebaut. Aber ohne Erfolg.
    Es wird keine Zeile angeklickt. Es soll nur eine Ausgabe erfolgen. Farblich unterschieden nach Männlein und Fraulein.
    Ab dem zweiten Eintrag passt das, wenn ich Rows.DefaultCellStyle setze. Aber die erste Zeile bleibt weiterhin in der Grundfarbe black.
    aktuell, ist noch identisch mit Post 1

    VB.NET-Quellcode

    1. If int_Ges > -1 Then
    2. For int_l01 = 0 To int_Ges
    3. r_lng_ID = tg_lng_ID(int_l01)
    4. r_str_Name = tg_str_Name(int_l01)
    5. r_str_GebName = tg_str_GebName(int_l01)
    6. r_str_Vorname = tg_str_Vorname(int_l01)
    7. r_str_GOrt = tg_str_GOrt(int_l01)
    8. r_str_GDat_JJ = tg_str_GDat_JJ(int_l01)
    9. r_str_GDat_MM = tg_str_GDat_MM(int_l01)
    10. r_str_GDat_TT = tg_str_GDat_TT(int_l01)
    11. r_str_SDat_JJ = tg_str_SDat_JJ(int_l01)
    12. r_str_SDat_MM = tg_str_SDat_MM(int_l01)
    13. r_str_SDat_TT = tg_str_SDat_TT(int_l01)
    14. r_str_Geschl = tg_str_Geschl(int_l01)
    15. Call Color_Geschlecht()
    16. Call Erm_HDat()
    17. REM *--------------------------------------------*
    18. REM * Füllen des DataGrids *
    19. REM *--------------------------------------------*
    20. With .dgv_Geschwister
    21. .Rows.Add(r_lng_ID.ToString("####0"), r_str_Name, r_str_GebName, r_str_Vorname, str_HDat1, str_HDat2, str_HDat3, r_str_Geschl)
    22. .Rows(int_l01).DefaultCellStyle.ForeColor = col_tx_Geschl
    23. End With
    24. Next
    25. End If​
    Wolltest du das nicht über das CellFormatting Event machen? Wo ist der Code dazu?
    "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
    Das mit dem Upload hat leider schon wieder nicht geklappt. die sln-Datei ist im Hauptverzeichnis, obwohl die eins drüber sein sollte (ok, kann ich selber korrigieren), aber im Projekt selber sind Verweise auf die Dateien app.config, Application.myapp, AssemblyInfo.vb, Resources.resx und settings.settings. Nur sind diese Dateien nicht dabei. 8|
    Ok, was soll's. Auch wenn's vielleicht größentechnisch übel wird: Nimm bitte Deinen definitiv funktionierenden Projektordner und zippe ihn. Nix vorher aufräumen, rauslöschen oder bereinigen.
    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.

    Normen schrieb:

    aktuell, ist noch identisch mit Post 1

    VB.NET-Quellcode

    1. with .dgv_Geschwister
    2. .Rows.Add(r_lng_ID.ToString("####0"), r_str_Name, r_str_GebName, r_str_Vorname, str_HDat1, str_HDat2, str_HDat3, r_str_Geschl)
    3. [color=#0000CD][/color] .Rows(int_l01).DefaultCellStyle.ForeColor = col_tx_Geschl[color=#0000CD][/color]
    4. End With
    5. Next
    6. End If


    das Formatieren(.Rows(int_l01).DefaultCellStyle.ForeColor = col_tx_Geschl) beim Laden musst du entfernen

    das Formatieren soll ja hier stattfinden

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    2. If Not DataGridView1.Rows(e.RowIndex).IsNewRow Then
    3. Dim RowColor As Color
    4. Select Case DataGridView1.Rows(e.RowIndex).Cells(2).Value
    5. Case "W"
    6. RowColor = Color.Red
    7. Case "M"
    8. RowColor = Color.Blue
    9. Case ""
    10. RowColor = Color.Green
    11. Case Else
    12. RowColor = Color.Black
    13. End Select
    14. DataGridView1.Rows(e.RowIndex).DefaultCellStyle.ForeColor = RowColor
    15. End If
    16. End Sub




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

    Das Formatting funktioniert auch nicht. Code siehe nachstehend. Meine Zeile
    ...rows(int_l01) habe ich stillgelegt.


    VB.NET-Quellcode

    1. Private Sub Dgv_Geschwister_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgv_Geschwister.CellFormatting
    2. With Me.dgv_Geschwister
    3. If Not .Rows(e.RowIndex).IsNewRow Then
    4. Dim RowColor As Color
    5. Select Case .Rows(e.RowIndex).Cells(7).Value
    6. Case "F"
    7. RowColor = Color.Red
    8. Case "M"
    9. RowColor = Color.Blue
    10. Case ""
    11. RowColor = Color.Green
    12. Case Else
    13. RowColor = Color.Black
    14. End Select
    15. .Rows(e.RowIndex).DefaultCellStyle.ForeColor = RowColor
    16. End If
    17. End With
    18. End Sub


    Das Ergebnis ist gleich, d.h. erste Zeile ist black statt blue

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

    1. wie geschrieben: bitte nochmal ohne Bereinigung gezippt hochladen, weil auch der Upload in Post#19 nicht funktionsfähig ist
    2. Wie sieht es aus, wenn Du in dem DGV nach dem fehlerhaften Einfärben die 2. Zeile anklickst/auswählst?
    3. Wie sieht es aus, wenn Du in der Datei cls_10_Mask_01.vb die Zeilen#97 und #99 auskommenstierst, also deaktivierst:

    VB.NET-Quellcode

    1. '.dgv_Geschwister.RowTemplate.DefaultCellStyle.SelectionForeColor = Color.Black
    2. '.dgv_Geschwister.RowsDefaultCellStyle.ForeColor = Color.Black

    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.
    Ich habe die Zeilen 97 und 99 stillgelegt. Ergebnis: keine Änderung
    Wenn ich die 2. Zeile anklicke, wird wunschgemäß die Sicht geändert. Nun erscheint die 2. Zeile in schwarz.

    Im Anhang das gesamte Projekt.
    Dateien
    • NM_Ahnen.zip

      (1,52 MB, 40 mal heruntergeladen, zuletzt: )
    Ich glaub ich geb es auf. Nun kann ich zwar das Projekt laden, aber da so viele Codestellen eine vorhandene Access-Datenbankdatei voraussetzen, dass es ohne nur zu Crashs kommt, ist dieser Weg sinnlos.

    Normen schrieb:

    Wenn ich die 2. Zeile anklicke, wird wunschgemäß die Sicht geändert. Nun erscheint die 2. Zeile in schwarz.
    Öhm. Problem erkannt, Gefahr gebannt? Es ist also die Selektion, die das "Problem" macht. Fertig. Führe daher diesen Code aus und das DGV ist bis zum nächsten Klick so wie Du willst:

    VB.NET-Quellcode

    1. dgv_Geschwister.ClearSelection()

    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.
    Hallo zusammen,
    alle Ratschläge haben zu keinem anderen "gewünschtem" Ergebnis geführt. Ich lasse das erst einmal so stehen. Ich vermute, dass sie Cell-Vererbung damit zu tun hat. Bei Gelegenheit muss ich dies tiefergehend checken.
    Trotzdem danke für die vielen Hilfestellungen
    Wenn das DGV nur zur Anzeige dienen soll, dann stell Enabled auf False und lösche die Selektion, wie in Post#32 beschrieben. Dann sind die Farben korrekt. Denn das hast Du effektiv in Post#31 bestätigt. Wenn man aber im DGV irgendwelche Zellen anklicken können soll, muss der User ja wissen, wo er sich gerade befindet. Eine Farbmarkierung irgendeiner Art muss daher dann vorhanden sein. Das ist bei Dir eben Text-komplett-schwarz, v.a. wenn Du SelectionMode auf FullRowSelect hast. Daher musst Du Dich entscheiden: Alles schön, aber ohne Auswahlmöglichkeit oder Auswahlmöglichkeit, aber mit Farbmarkierung.
    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.
    hab dein Projekt mir angesehen,
    du hast in der Form NM_Ahnen versucht unter "_CellContentClick_1"

    VB.NET-Quellcode

    1. Private Sub Dgv_Geschwister_CellContentClick_1(sender As Object, e As DataGridViewCellEventArgs) Handles dgv_Geschwister.CellContentClick
    2. With Me.dgv_Geschwister
    3. If Not .Rows(e.RowIndex).IsNewRow Then
    4. Dim RowColor As Color
    5. Select Case .Rows(e.RowIndex).Cells(7).Value
    6. Case "F"
    7. RowColor = Color.Red
    8. Case "M"
    9. RowColor = Color.Blue
    10. Case ""
    11. RowColor = Color.Green
    12. Case Else
    13. RowColor = Color.Black
    14. End Select
    15. .Rows(e.RowIndex).DefaultCellStyle.ForeColor = RowColor
    16. End If
    17. End With
    18. End Sub


    sollte doch unter

    VB.NET-Quellcode

    1. Private Sub dgv_Geschwister_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgv_Geschwister.CellFormatting
    2. End Sub


    oder habe ich jetzt die falsche Form, ohne DB kann ich leider nicht testen