Ich male meine Zeilen in einer DataGridView wie folgt:
%Vor%Dann rufe ich es in der OnLoad Methode auf:
%Vor%Ich bevorzuge OnLoad zu OnPaint oder etwas .. weil OnPaint sehr oft aufgerufen wird.
Die Frage: Warum dauert es etwa 100 - 200 ms, um den Hintergrund jeder Zeile zu ändern? Früher war ich CellPaint .. aber ich hatte Probleme beim Scrollen mit erfrischend ..
Anstatt die Farbe des gesamten DataGrid
auf einmal zu ändern, sollten Sie das Rendering durch Überschreiben des CellFormatting
-Ereignisses verwalten lassen. Die Zeilen werden nur dann gezeichnet, wenn sie tatsächlich auf dem Bildschirm angezeigt werden.
Wenn dies immer noch zu langsam ist, versuchen Sie, das reale Objekt zu erhalten, an das die Zeile gebunden ist:
%Vor%Es ist wahrscheinlich der Anruf Enum.Parse, es hat eine schlechte Leistung. Sie sollten versuchen, es in eine Wörterbuchsuche zu ändern, um zu sehen, ob das die Leistung verbessert. Siehe posten
Wie SwDevMan1 gesagt hat, sollten Sie zunächst den Enum.Parse-Aufruf entfernen. Verwenden Sie die Datenbindung, um das Raster zu füllen? In diesem Fall können Sie mit Rows [index] .DataBoundItem auf das datengebundene Objekt für die Zeile zugreifen und direkt auf den Status "AufgabeStatus" zugreifen.
Der zweite Tweak, den ich vorschlagen würde, ist, SuspendLayout () und ResumeLayout () vor bzw. nach der Manipulation des Gitters aufzurufen.
Es ist auch eine gute Idee, die Eigenschaften nur dann festzulegen, wenn sie vom erwarteten Wert abweichen. Auf diese Weise lösen Sie keinen unerwünschten internen DataGridView-Overhead aus.
Wenn alle Zellen in einer Zeile auf dieselbe Weise formatiert sind, können Sie die Formatierung auf Zeilenebene statt auf Zellenebene vornehmen.
%Vor%Versuchen Sie nicht das Zeilenformat als row.defaultcellstyle
probiere die individuelle Zellenformatierung in ufgabenDataGridView_CellFormatting
cell [0] .style.backcolor = color.yellow
Tags und Links c# winforms datagridview