Hallo,
also was genau möchtest Du nochmal "übermalen", den ColumnHeader oder eine bestimmte Zelle?
Eigentlich ist es egal, denn in beiden Situationen musst Du entweder das DataGridView-Objekt in einer selbst geschriebenen Klasse ableiten (erben) und bestimmte Sektionen überschreiben, oder im OnPaint()-Ereignis einfach die Position der Column/Cell ermitteln(falls die sich geändert hat) und anschließend genau an dieser Stelle "übermalen", Stichwort Direct2D.
@override(überschreiben): dazu würde ich zuerst das OnPaint()-Ereignis genauer unter die Lupe nehmen und anschließend entscheiden, was genau (oder ob etwas) überschrieben werden muss, sobald Du das DataGridView darstellst.
Eine andere Möglichkeit gibt es in meinen Augen nicht, etwas zu "übermalen".
Es wäre im übrigen hilfreich zu wissen, in welcher Sprache das Ganze geschrieben wird.
Viele Grüße