2009-08-10 8 views
4

Ich habe eine DataGridView gebunden an eine Liste von benutzerdefinierten Objekten on the fly erstellt. Diese Liste ist nicht sehr groß, 5000 Artikel maximal. Die Werte der benutzerdefinierten Objekte ändern sich jedoch alle 50 ms und das Raster hängt die Anwendung, während die Werte aktualisiert werden, und es stürzt schließlich ab.Wie kann ich nur die sichtbaren Zeilen eines datengebundenen DataGridView aktualisieren?

Meine Frage ist: gibt es eine Möglichkeit, die Datenbindung der DataGridView zu "virtualisieren", so dass nur die Zeilen aktualisiert werden, die tatsächlich auf dem Bildschirm zu sehen sind?

EDIT: Ich fand heraus, warum meine DataGridView war so langsam und es hatte nichts mit Datenbindung zu tun. Diese Frage ist also nicht mehr relevant. Als eine Randnotiz, ich glaube, die DataGridView aktualisiert bereits nur die sichtbaren Zeilen, wenn ein ListChanged Ereignis auftritt.

Antwort

0

Was Sie gerade stoppt die sichtbare Teilmenge von Elementen anstelle der vollständigen 5000 ziehen?

+0

Ich ziehe keine Daten, die Objekte in der Liste sind Teil der Funktionalität der Anwendung. –

1

Verbrauchte eine ganze Weile, um dieses Problem suchen und diese Frage gehalten Aufspringen, also werde ich hier die Antwort verknüpfen, die mein Problem gelöst: https://stackoverflow.com/a/9348149/674884

Ich habe ein Datagridview an eine Binding gebunden, die auch von Comboboxen gebunden ist und TextBoxes verwendet, um die Daten zu bearbeiten. Jedes Leave-Ereignis in den Editoren hatte eine große Verzögerung, die dadurch verursacht wurde, dass DataGridView alle Zeilen neu zeichnete, als die Daten aktualisiert wurden. Dies ist auch bei Verwendung von VirtualMode passiert.

Das Problem wurde durch die AllCells Autosize-Einstellung von Datagridview-Spalten verursacht wird. Jedes Mal, wenn ein Wert geändert wurde, durchging das DataGridView alle Zeilen, um den längsten String für die automatische Größenanpassung der Spalte zu finden. Nach der Deaktivierung der automatischen Größenanpassung wurde mir klar, dass selbst die datengebundene DataGridView nur die sichtbaren Zeilen zeichnet, sodass Sie den VirtualMode nicht verwenden müssen.

Verwandte Themen