2009-04-20 5 views
3

Ich versuche, etwas Verhalten in einer App herauszufinden, die ich unterstütze. Das Snippet ist:Langsame Leistung von DataGridViewRow in .NET C# -Anwendung

foreach (DataGridViewRow pGridRow in grdEmail.Rows) 
{ 
    pGridRow.Cells[0].Value = chkSelectAll.Checked; 
    pCount = pGridRow.Index + 1; 
} 

, die im Wesentlichen versucht, alle Zeilen in einem Raster zu wählen (ein Kontrollkästchen), wenn eine Auswahl all Kontrollkästchen angeklickt wird.

Wenn das Raster ein paar Zeilen hat (hundert oder so), funktioniert es wunderbar. Aber wenn ich ungefähr 5000 Reihen darin habe, kriecht dieses Ding. Der Befehl pGridRow.Cells[0].Value = chkSelectAll.Checked dauert etwa eine Sekunde (zeitgesteuert, indem Console.prints darüber und darunter gesetzt wird).

Jede Idee würde bei der Lösung dieses Problems geschätzt werden.

+0

Wie viele Spalten befinden sich in diesem DataGridView? Eine Sekunde oder zwei, um Text einer Zelle zu finden und zu setzen, scheint eine lange lange Zeit zu sein. –

Antwort

0

Was ist der Punkt, wenn 5000 Zeilen gleichzeitig sichtbar sind?

Kann dies nicht paginiert werden?
Kann das Kontrollkästchen nicht als standardmäßig aktiviert markiert werden?

+1

Es gibt viele Gründe, 5000 Reihen gleichzeitig zu zeigen. Sortierung nach einem. 5000 ist nicht wirklich so viel. Ich habe Nutzer, die in Panik geraten würden, wenn sie nicht alle Daten gleichzeitig sehen könnten. –

0

Versuchen Sie, die zugrunde liegende Datenquelle (falls vorhanden) direkt zu ändern, anstatt den Wert der Zelle festzulegen.

//assuming datasetFoo.Tables(0) is the DataSource of the DataGridView 
foreach (DataRow rowFoo in datasetFoo.Tables(0) { 
     rowFoo ("Sel") = chkSelectAll.Checked; 
    } 
1

Tausende von Zeilen gleichzeitig anzuzeigen, ist verschwenderisch und macht es für Benutzer sehr schwierig, die Daten zu finden, die sie benötigen. Ich würde auf jeden Fall die Paginierung empfehlen. Ihre Benutzer werden es Ihnen danken. (Es sei denn, sie haben speziell zu sehen 5000 auf einmal angefordert, was albern scheint.)

1

Versuchen Sie, die Einstellung von Eigenschaften:

grdEmail.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
grdEmail.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 

Weil es das scheint für die anderen Werte dieser beiden Eigenschaften der Datagridview versucht, Ändern Sie die Größe der Zeilen und Spalten, auch wenn Sie nur einige Kontrollkästchen im Raster aktivieren.

Verwandte Themen