Datagridview - Fore Color im Header setzen

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

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Noyne.

    Datagridview - Fore Color im Header setzen

    Hi,

    die Inhalte von Spalten einer DatagridView kann man leicht einfärben. Etwa

    VB.NET-Quellcode

    1. FileName.DefaultCellStyle.ForeColor = Color.Red


    Ich will aber nicht die Spalteninhalte einfärben, sondern den Spaltenheader.

    Nach einer Eigenschaft wie DefaultHeaderCellStyle suche ich aber vergeblich. Es gibt nur eine Eigenschaft DefaultHeaderCellType und die hilft mir wohl nicht weiter.

    Kann man die Farbe eines Spaltenheaders überhaupt setzen? Und wenn ja, wie geht das?

    LG
    Peter
    Hey Peter,

    die Zeilen

    VB.NET-Quellcode

    1. dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.White
    2. dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Black
    hab ich hier stackoverflow.com/questions/78…datagridview-header-color gefunden, aber so richtig funktionieren tut's irgendwie nicht bei mir ...

    Hast du mal mit der DGV-Eigenschaft ColumnHeaderDefaultCellStyle rumgespielt?! (ist auch im Designer erreichbar)
    Bei mir ging irgendwie alles außer dem Verfärben der Header, obwohl es vom Designer her möglich zu sein scheint ?(

    EDIT: Habe es gerade gesehen ... Ganz unten in dem Thread steht es: "Set the property EnableHeadersVisualStyles to False" ... Danach lassen sich die Header farblich verändern ;)

    GLG, Noyne
    Your computer is running... You better go chase it! :P :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Noyne“ ()

    Erst mal herzlichen Dank für deine Antwort.

    Ich hab das mal ausprobiert ... so kann man tatsächlich die Farbe der Spaltenüberschriften einstellen. Aber leider werden damit ALLE Header auf die gleiche Farbe eingestellt.

    Ich möchte aber nur die Farbe eines EINZELNEN Headers einstellen, weil ich auf diese Spalte besonders hinweisen möchte.

    So scheint das leider nicht zu funktionieren ...

    LG
    Peter

    Peter329 schrieb:

    diese Spalte
    Dann setze einfach die Hintergrundfarbe der Zellen der betreffenden Spalte auf eine andere Farbe, das musst Du einzeln für alle Zellen machen.
    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!
    Oder du versuchst etwas in der Art hier:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. For i = 0 To DataGridView1.Columns.Count - 1
    3. If i Mod 2 = 0 Then
    4. DataGridView1.Columns(i).HeaderCell.Style.BackColor = Color.Aqua
    5. Else
    6. DataGridView1.Columns(i).HeaderCell.Style.BackColor = Color.Yellow
    7. End If
    8. Next
    9. End Sub

    SIEHE Anhang!!!

    OOOODER: sowas:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. For i = 0 To DataGridView1.Columns.Count - 1
    3. If i = 3 Then
    4. DataGridView1.Columns(i).HeaderCell.Style.BackColor = Color.Aqua
    5. End If
    6. Next
    7. End Sub
    Gibt dann das Bild 2 im Anhang ...
    Bilder
    • Dgv.png

      44,44 kB, 913×571, 330 mal angesehen
    • DGV 2 Ein Header.png

      41,43 kB, 1.109×718, 367 mal angesehen
    Your computer is running... You better go chase it! :P :D
    Okie dokie ... wie immer erst mal vielen Dank für eure Ratschläge !

    Jau, das mit dem Hintergrund funktioniert.

    Allerdings bin ich damit nicht ganz so happy. Die Anwendungslogik sieht in dieser Form so aus, dass verschiedene Zustände ausgewählt werden können. Die entsprechende Beschriftung der Controls (z.B. Buttons) ist dann ROT.

    Durch erneutes Anklicken, wird die Sache wieder abgewählt ... dann wird die Schriftfarbe wieder auf den Default zurückgesetzt.

    Das gilt so für alle auswählbaren Controls. Und so sollte das auch für die Sort Controls der DataGridView gelten.

    Euren Beiträgen nach zu urteilen scheint es mir aber, dass man die Header der DatagridView farblich nicht genauso steuern kann. Das ist schade, weil das halt dem Design der Anwendung nicht entspricht.

    Na gut, man kann eben nicht alles haben.

    Danke für euer bemerkenswertes Engagement !

    LG
    Peter
    Hey Peter,

    ich versteh' nicht wiiiirklich was du versuchst zu erreichen, aber guck' mal hier vielleicht noch rein: noch ein coloriertes Datagridview
    Eventuell findest du da noch irgendwas, was dich zusätzlich weiterbringt ;)

    Ansonst müsstest du vielleicht noch mal ein bisschen genauer und nich ganz so konfus ausdrücken, was du gerne hättest :)

    GLG, Noyne
    Your computer is running... You better go chase it! :P :D
    Jetzt muss ich meinen Beitrag revidieren ...

    Also: das Ändern der Schriftfarbe funktioniert ... da hab ich eure Beiträge vielleicht gründlich missverstanden:

    Wie @Noyne geschrieben hat, muss man Folgendes setzen:

    VB.NET-Quellcode

    1. dgvFiles.EnableHeadersVisualStyles = False


    Und dann kann man ganz einfach die Farbe der Schrift einstellen:

    VB.NET-Quellcode

    1. dgvFiles.Columns(0).HeaderCell.Style.ForeColor = Color.Red


    Jetzt hab sogar ich das geschnallt. Sorry, für die Konfusion.

    Jetzt hab ich nur noch ein klitzekleines Problem:

    Wenn man dgvFiles.EnableHeadersVisualStyles = False setzt, dann verändert sich auch der "Glyph", das ist das kleine Dreieck, das auf- bzw. abwärts Sortierung anzeigt. Dieses kleine Dreieck wird jetzt als Schrägstrich bzw. Backslash angezeigt ... und natürlich gefällt mir das nicht.

    Kann man das irgendwie wieder als Dreieck anzeigen ?

    Ich hoffe, ihr könnt mir helfen!

    LG
    Peter

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Peter329“ ()

    Peter329 schrieb:

    Header Buttons
    gibt es nicht.
    Bei einem "richtigen" Button sind das Standard-Properties eines (einfachen) Controls. Ein DataGridView ist ein arg komplexes Control, da musst Du Dich um dererlei "Kleinkram" selbst kümmern.
    Such ggf. mal nach Ownerdraw DataGridView.
    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!

    RodFromGermany schrieb:

    Peter329 schrieb:

    Header Buttons
    gibt es nicht.


    Klar, das sind Column Header und keine Buttons. Obwohl sie irgendwie so ausssehen wie Buttons und auch ähnliche Funktionalität haben, wenn ich das mal so lax anmerken darf.

    Und natürlich ist eine DatagridView eine komplexe Control.

    Aber ich frage mich halt schon, warum die Controls im VB nicht KONSISTENT sind. Die HeaderCells haben eine Text Eigenschaft. Wie ein normaler Command Button. Und mit dieser Eigenschaft der HeaderCells kann man die Beschriftung wie bei einem Button vornehmen.

    Warum also geht das nicht für die Schriftfarbe ? Eine Eigenschaft DefaultHeadeCellStyle in der man die Farbe wie bei einem Button einstellen kann, wäre für meinen Geschmack sehr naheliegend. Aber immer wieder ist das so, dass jede Control seine ganz eigenen Regeln und Besonderheiten hat.

    Damit wir uns nicht missverstehen: das ist natürlich nicht DEINE Schuld ... das sind Segnungen von Microsoft, die halt meines Erachtens nicht immer ganz so gelungen sind. Kritik muss ja auch erlaubt sein.

    Aber damit muss man leben.

    Ich für meinen Teil, habe jetzt statt der Farbe ein "$" in der Beschriftung eingefügt (weil die Text Eigenschaft ja problemlos zu setzen ist). Ich verzichte damit zwar auf die Farbe und das einheitliche Erscheinungsbild aber dafür bleibt das kleine niedliche Glyph erhalten. Diese Lösung ist für mich das kleinere Übel.

    Vielleicht werde ich mich in die Tiefen des DataGrid Controls einarbeiten ... oder ich warte drauf, dass mir irgendwo im Netz eine Lösung für dieses leidige Problem über den Weg läuft. Denn ich könnte mir schon vorstellen, dass ich nicht der Einzige bin, der solch eine Anforderung hat.

    Oder vielleicht hat ja sonst noch jemand eine schlaue Idee, wie ich die Beschriftung der SpaltenHeader einer GridView verändern kann ohne das Glyph einzubüßen.

    Vielen Dank für eure Mühe und unendliche Geduld. :)

    LG
    Peter

    Peter329 schrieb:

    das sind Segnungen von Microsoft
    So isses.
    Sieh Dir mal eine Excel-Tabelel an, was die nicht können, kann das DGV schon lange nicht.
    Die Umkehrung gilt leider 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!
    Morgen ;)

    Peter329 schrieb:

    Dieses kleine Dreieck wird jetzt als Schrägstrich bzw. Backslash angezeigt
    Bei mir sieht's eher wie ein "eingesunkenes" Dreieck aus ... Ist das so kriegsentscheidend wie das furz Dreieck aussieht, wenn dafür die Einfärbung passt?!

    Ansonsten ... Hat dich der Artikel vom EDR weitergebracht, den ich verlinkt hatte?!

    GLG, Noyne
    Your computer is running... You better go chase it! :P :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Noyne“ ()