C # WinForms DataGridView Hintergrund-Farbwiedergabe zu langsam

8

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 ..

    
PaN1C_Showt1Me 27.10.2009, 11:00
quelle

5 Antworten

10

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.

%Vor%

Wenn dies immer noch zu langsam ist, versuchen Sie, das reale Objekt zu erhalten, an das die Zeile gebunden ist:

%Vor%     
Julien Poulin 27.10.2009, 11:48
quelle
2

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

    
SwDevMan81 27.10.2009 11:34
quelle
2

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.

    
Jamie Ide 27.10.2009 11:46
quelle
2

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%     
Olivier 04.10.2010 15:14
quelle
0

Versuchen Sie nicht das Zeilenformat als row.defaultcellstyle

probiere die individuelle Zellenformatierung in ufgabenDataGridView_CellFormatting

cell [0] .style.backcolor = color.yellow

    
sudhir goyal 13.09.2014 16:05
quelle

Tags und Links