DataGridView Forecolor

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

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    DataGridView Forecolor

    Hallo zusammen,

    In diesem Forum habe ich schon einige Hilfen erhalten. Vielleicht kann ich jetzt mal etwas positives beitragen:

    ich bereits im vorigen Jahr das Problem, dass ich in einem DGV die ForeColor ändern wollte. Ich entwickel ein Programm zur Familienforschung - dabei würde ich gern die Mädels rot und die Jungens blau im Grid anzeigen. Bis auf eine Zeile funktionierte es. Ich habe nun heute etwas getestet, um zu einer Lösung zu kommen. Festgestellt habe ich dabei, dass immer der Wert für den ersten Eintrag im Grid nicht anpassbar war - alle folgenden Einträge wurden korrekt quittiert. Ich habe vermutet, dass es an dem anschließenden Sort liegt - ist aber nicht die Ursache.
    Ich habe nun, bevor ich das Grid in einer Schleife fülle, einen Dummy-Satz eingefügt.

    VB.NET-Quellcode

    1. 'Dummy_Zeile einfügen.Rows.Add(0, "x", "x", "x", strH, strH, strH, "x")


    Danach habe ich das Grid in der Schleife mit den Echtdaten gefüttert.

    VB.NET-Quellcode

    1. For int_l01 = 0 To int_Ges
    2. r_lng_ID = tg_lng_ID(int_l01)
    3. r_str_Name = tg_str_Name(int_l01)
    4. r_str_GebName = tg_str_GebName(int_l01)
    5. r_str_Vorname = tg_str_Vorname(int_l01)
    6. r_str_GOrt = tg_str_GOrt(int_l01)
    7. r_str_GDat_JJ = tg_str_GDat_JJ(int_l01)
    8. r_str_GDat_MM = tg_str_GDat_MM(int_l01)
    9. r_str_GDat_TT = tg_str_GDat_TT(int_l01)
    10. r_str_SDat_JJ = tg_str_SDat_JJ(int_l01)
    11. r_str_SDat_MM = tg_str_SDat_MM(int_l01)
    12. r_str_SDat_TT = tg_str_SDat_TT(int_l01)
    13. r_str_Geschl = tg_str_Geschl(int_l01)
    14. Call Erm_HDat()
    15. REM *--------------------------------------------*
    16. REM * Füllen des DataGrids *
    17. REM * -------------------------------------------*
    18. .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)
    19. Next

    Nach Beendigung der Schleife habe ich nun den Dummyeintrag wie folgt gesetzt

    VB.NET-Quellcode

    1. .Rows(0).Visible = False

    Anschließend habe ich die Gridzeilen auf den Geschlechtstyp geprüft und die Colorierung vorgenommen.

    VB.NET-Quellcode

    1. With NM_Ahnen.dgv_Geschwister
    2. For int_l01 = 0 To int_Ges + 1
    3. r_str_Geschl = .Rows(int_l01).Cells(7).Value
    4. Call Color_Geschlecht()
    5. .Rows(int_l01).DefaultCellStyle.ForeColor = col_tx_Geschl
    6. Next
    7. End With

    Alles ist nun zu meiner Zufriedenheit.
    Dies ist zwar nur ein Workaround, aber vielleicht hilft es dem Einen oder Anderen.
    Viel Erfolg
    Norbert
    Vielen Dank für das Teilen Deiner Lösung. Aber:
    Du hast einen Workaround für Deinen Code gefunden. Wenn man es entsprechend angeht, funktioniert das auch ohne Workaround.
    Beispiel:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. DataGridView1.Rows.Add("Max Müller", #01/01/2000#, "m")
    3. DataGridView1.Rows.Add("Susi Sorglos", #03/31/2001#, "f")
    4. DataGridView1.Rows.Add("Arno Angeber", #12/05/1950#, "m")
    5. DataGridView1.Rows.Add("Herta Hummel", #04/18/1977#, "f")
    6. For Each Row In DataGridView1.Rows.Cast(Of DataGridViewRow)
    7. If Row.Index = DataGridView1.RowCount - 1 Then Exit For
    8. Dim Color = If(Row.Cells(2).Value.ToString = "m", Drawing.Color.Blue, Drawing.Color.Red)
    9. Row.DefaultCellStyle.ForeColor = Color
    10. Next
    11. End Sub
    Bilder
    • DGV.png

      3,63 kB, 388×150, 24 mal angesehen
    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 VaporiZed,
    habe mal deine Lösung eingebaut. Ergebnis: Ich bekomme wieder eine Zeile nicht coloriert. Dazu habe ich keine Idee. Als Anmerkung vielleicht - meine Spalte Geschlecht ist auf nicht sichtbar gestellt. Der nicht colorierte Datensatz ist immer der, der als erster ins DGV geladen wird.
    Falls Du ein stark abgespecktes Projekt hochladen könntest, könnten wir nach der Ursache suchen.
    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 VaporiZed,
    es ist doch ein sehr komplexes und umfangreiches Projekt. Ich habe es vor einigen Tagen bereits kpl. zum Thema "Webbrowser und PicBox" hochgeladen. Aber ohne DB-Anbindung schwer nachzuvollziehen.
    Gruß
    Norbert
    @Normen Dann erstelle ein kleines Testprojekt, das Deine Effekte reproduziert.
    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!
    …denn es geht ja in erster Linie um Deine Manipulation des DGVs. Die Testdaten sind ja pillepalle, die können wir uns notfalls auch selber zusammenstellen. Aber je weniger wir selber basteln müssen, desto weniger besteht die Gefahr, dass wir an ner anderen Stelle als Du abbiegen, es zum Laufen bekommen und uns wundern, was Du meinst.
    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.
    @HenryV Ich gehe mal davon aus, dass dies beim TE nicht vorkommt.
    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!
    @HenryV Dieses Mammut-Projekt compiliert nicht, da habe ich keine Veranlassung, ein Event zu suchen.
    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!
    Hallo zusammen,
    Ich habe gerade ein neues Projekt erstellt, um die Funktion zu testen. Jetzt funktioniert es auch in diesem Test. Dabei ist mir aufgefallen, dass in diesem Projekte das Zielframework "Net 6.0" genutzt wird. In meinem bisherigem Projekt nutze ich "NET Framework 4.8". Könnte darin der Unterschied liegen.
    Es gelingt mir aber nicht, das Projekt auf 6.0 umzustellen - wird mir trotz 6.0-Download und Ausführung nicht angeboten. Ausserdem steht jetzt im Startobjekt "Sub Main", war vorher meine Form - kann ich auch nicht umstellen.
    Habt ihr dazu eine Lösung?
    Herzlichen Dank im Voraus.

    Norbert
    Uiuiui, da hast Du aber definitiv falsche Projektvorlagen am Wickel. Der Wechsel von .NET-Framework (z.B. 4.8) auf .NET 6 wird m.E. nicht die DGV-Problem-Ursache beheben.
    Du solltest erstmal .NET-Framewwork nutzen. Die Bezeichnung lautet

    Quellcode

    1. Windows Forms-App (.NET Framework)
    2. Ein Projekt zum Erstellen einer Anwendung mit einer Windows Forms-Benutzeroberfläche (WinForms)

    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 VaporiZed,
    habe gerade noch einmal ein Projekt erstellt. Es wurde mir wieder 6.0 angeboten. Habe ich geändert auf Auswahl 5.0. Welche Fassung ist heute eigentlich die Richtige? Testprogramm zeigte alles richtig an.
    Nun habe ich mein echtes Projekt auch noch mal gestartet, ohne den Dummy-Satz 0 zu integrieren und siehe da, jetzt ist auch alles richtig. Dafür kenne ich die Lösung nicht. Habe heute allerdings auch VS2022 aktualisiert. Ich werde es jetzt mal so stehen lassen und hoffen, dass ich da nicht mehr ran muss.
    Wie kann ich eigentlich in meinem Projekt als Startobjekt meine Form eintragen. Im Moment lässt er nur "Sub Main" zu.

    Danke für deine Mühen.

    Norbert
    Hallo zusammen,
    da ich ja nun gute Erfahrungen mit der vorgeschlagenen Lösung gemacht hatte - auch mein Testobjekt war ok, habe ich heute alle meine DataGrids auf diesen Weg umgesetzt. Und siehe da, es war wieder aller wie vorher, eine Zeile wurde nicht coloriert. Ich habe alle Zustände noch mal mit Debug begleitet und kann keinen Fehler finden.
    Also nutze ich jetzt wieder meinen WorkAround - schade.
    Danke für Eure Hilfen.
    @Normen Poste mal das bereinigte neue Projekt.
    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!
    @Normen Wann wolltest Du uns mitteilen, dass Dein Programm in Net5, nicht aber .NET (FX) 4.5–4.8 geschrieben ist?

    Und:
    Was funktioniert nicht?
    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!

    Normen schrieb:

    Wie kann ich eigentlich in meinem Projekt als Startobjekt meine Form eintragen. Im Moment lässt er nur "Sub Main" zu.

    Ansonsten verstehe ich Dein Problem nicht. Sorry.
    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!