aufgerufen wird Dies ist ein WinForm C# -Anwendungsproblem.DataGridView ruft die Paint-Methode nicht auf, wenn InvalidateCell
Ich habe eine DataGridView und ich brauche einen benutzerdefinierten Typ von DataGridViewColumn so, dass, wenn meine Maus über eine Zelle in dieser Spalte ist, die Zelle etwas Besonderes darauf zeichnet. Ich fand a way des Überschreibens der DataGridViewTextBoxCell, um das Gemälde selbst zu machen. Dieser Artikel zeigt ein Beispiel für die Implementierung einer Rollover-Zelle. Wenn Sie Ihre Maus über eine Zelle bewegen, zeichnet sie ein rotes Rechteck um die Kanten der Zelle.
Wenn Sie das Beispiel sehen, werden Sie feststellen, dass die Art und Weise, wie das Beispiel Daten füllt, direkt Zeilen im Raster erzeugt. Wenn ich die Datenbindung anstelle der direkten Zeilenfüllung verwende, stelle ich fest, dass die Zellen sich am Anfang nicht selbst zeichnen. Eigentlich müssen Sie zuerst eine Zelle auswählen, dann werden alle Zellen in dieser Zeile korrekt dargestellt. Wenn Sie keine Zelle einer Zeile auswählen, werden alle Zellen in dieser Zeile nicht entsprechend angezeigt, wenn sich die Maus über ihnen befindet.
Ich denke, dies ist eine Art Optimierung des Gitters, so dass, wenn Sie eine Zelle auswählen, das zugrunde liegende Objekt dieser Zeile aktiviert ist und das Gitter Paint-Methode aufrufen, wenn InvlidateCell-Methode Aufruf ist. Wenn das zugrunde liegende Objekt einer Zeile jedoch nicht aktiviert ist, wird das Raster die Zellen standardmäßig malen, um Zeit zu sparen.
Offensichtlich brauche ich nicht die Optimierung, sondern den langsamen Weg. In meinem Fall spielt es keine Rolle, da meine Daten in diesem Raster niemals zu groß werden. Wie kann ich es erreichen? Ich versuche, grid.Refresh() aufzurufen, nachdem die Daten an das Raster gebunden sind, aber das hilft nicht.
Vielen Dank für Ihren Vorschlag.
Ji
Wenn ich this.DataGridView.Refresh() in der OnMouseEnter und OnMouseLeave Methoden setzen, ist das Problem behoben. Dies führt jedoch dazu, dass das gesamte Gitter blinkt, während sich die Maus darauf bewegt. Ich glaube, es ist keine gute Lösung. – Steve