[VB.NET] Datagridview – Schriftfarbe oder Hintergrundfarbe einer einzelnen Zelle ändern

Problem des Tages heute: Eine einzelne Zelle in einem Datagridview farbig ändern. Egal ob Schriftfarbe oder Hintergrundfarbe.

Schon mal versucht? Geht gar nicht so einfach. Das habe ich auch ganz schnell rausgefunden. Es gibt zwar die Style Eigenschaften, wenn man sich die Zelle mit Me.Datagridview1.Rows(0).Style… vorknöpft. Doch bewirkt eine Änderung hier nicht viel. Erst die letzte bzw. erste neue Zelle wird damit eingefärbt. Nicht aber die Zelle die man eigentlich einfärben möchte.

Und so habe ich heute stundenlang hin und her experimentiert, Google befragt, mich durch etliche Foren belesen, kuriose Klassen ausprobiert… und es am Ende doch selbst gemacht.

Leider ist es ein sehr mühsamer Weg, wenn man einer einzigen besch*** Zelle sagen will “Mache mal den Text Rot!”. Denn man muss das komplette Datagridview manuell anlegen. Ich arbeite ja generell ohne Databindings. Ja, fragt mich nicht warum, ich mache es halt :-) Nur war es bis dato einfach zu sagen Me.Datagridview1.Rows.Add(„Text 1“, „Text 2“, 1, 2, 3, etc.)

Jetzt wird das ganze nicht mehr so einfach. Jetzt müssen wir jede Zelle wirklich einzeln anlegen, denn nur so können wir auf die konkreten Zelleigenschaften zugreifen und auch setzen.
Ok, wie geht es konkret.

Dim DGVRow As New DataGridViewRow 
Dim Cell As DataGridViewCell 

'Eine normale Zelle 
Cell = New DataGridViewTextBoxCell 
Cell.Value = "Ein Text zum Testen" 
DGVRow.Cells.Add(Cell) 

'Eine Zelle mit rotem Text 
Cell = New DataGridViewTextBoxCell 
Cell.Value = "Ein roter Text zum Testen" 
Cell.Style.ForeColor = Color.Red 
DGVRow.Cells.Add(Cell) 

Me.Datagridview1.Rows.Add(DGVRow)

Was machen wir hier? Wir definieren eine einzelne Datagridview-Zelle und weisen dieser alle nötigen Werte zu. Im Normalfall einfach nur den Value. Aber man kann ihr jetzt auch eine Schriftfarbe zuweisen oder eine Hintergrundfarbe, Schriftart und alles weitere.
Dann packen wir die Zelle in einen Datagridview-Row (DGVRow) und können Sie danach neu Formatieren und neu Belegen, mit der nächsten Zelle. Die dann auch wieder in das Row-Element… bis alle Zellen für ein Row voll sind. Das vollständige DGVRow weisen wir letztendlich dem Me.Datagridview.Row.Add zu. Fertig…

… mit einer Zeile. Das müssen wir jetzt für alle Zeilen machen die dem Datagridview hinzugefügt werden sollen. Daher ist meine Empfehlung das ganze einer Funktion zuzuweisen oder noch besser einer Class. Das hier soll ja nur zur Orientierung dienen wie es funktioniert.

Sehr umständlich, aber funktioniert. Und das ohne fremde Klasse. ;-)

Update: Ich korrigiere. Auch mit Me.Datagridview1.Rows(0).Cells(0).Style.ForeColor = … lässt sich die Schriftfarbe verändern. Nur warum es mal funktioniert und mal nicht… das muss ich noch ergründen. Als einfach ausprobieren. Wenn es so funktioniert, dann kann man sich den komplizierteren Weg oben sparen.

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Ich stimme der Datenschutzerklärung zu