PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .NET DataGridView, große Datenmengen.


Yavion
2010-01-15, 10:06:32
Moin!

ich benutze ein DataGridView (.NET, Forms) um Tabellen darzustellen.
Folgendes Problem habe ich dabei:
1. Die Tabellen sind sehr groß (10 Spalten, gerne mal 100000 Zeilen).
2. Die Zeilen sollte man iwie sortieren können. Am besten durch Klick auf den Spaltenheader.
3. Die Daten liegen nicht in einer Datenbank vor, sondern wurden aus Textdateien ausgelesen.

Mein erster Versuch war ein unbound DataGridView, in dem einfach Reihenweise die Daten eingepflegt wurden. Schöne Sache nur leider zu langsam: Das Füllen geht noch aber sortieren und enfernen von Zeilen ist unbrauchbar langsam.

Mein zweiter Versuch war es, das DataGridView im VirtualMode zu betreiben, wobei das Grid seine Infos aus einem DataTable via form.dataGridView1.CellValueNeeded Handler bekommt.
Seeehr schnell aber leider: Keine Sortierung möglich und auch sonst nichts: Kein vertauschen von Spalten etc. Ich müsste diese Funktionen also iwie selbst implementieren und frage mich, ob das den Aufwand wert ist, wenn am Ende das sortieren auf dem DataTable (oder DataView) ebenso lange dauert.


Hat jemand Erfahrung mit sowas und kann mir da eine "best practice" nennen?

Yavion
2010-01-15, 10:46:22
Okay. Konnte es dann doch schneller rausfinden als gedacht:
Offenbar ist ein unbound DataGridView einfach die falsche Lösung.
Habe jetzt mal meine Daten in eine DataTable geschrieben und diese an eine BindingSource getackert, auf welche dann das DGV zugreift.

Jetzt ist es schnell, und ich kann schnell sortieren! =)

][immy
2010-01-15, 18:01:11
kleiner tipp noch, das Datagridview hat probleme mit mehr als 32k zeichen in einer zelle. man kann zwar auf die größe per int (32) angeben, aber ist trotzdem auf int 16 begrenzt.
zudem gibt es noch render-probleme und probleme mit dem scrollbalken.

ich würde es inzwischen nicht mehr einsetzen. andererseits gibt es noch die WPF-extensions, wo ein neues datagrid über wpf zur verfügung steht. vielleicht hat das ein paar bugs weniger.

um die datagridview zu befüllen würde ich auch einen weiteren thread benutzen und dann immer so 100 - 1000 daten einfügen (per invoke). dadurch unterbrichst du das rendering nicht zu sehr (wenn möglich währenddessen auch das rendering anhalten).