Laden...

DataGrid: Daten bei großen Datenmengen dynamisch beim Scrollen nachladen

Erstellt von MillionsterNutzer vor 7 Jahren Letzter Beitrag vor 7 Jahren 4.205 Views
M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 7 Jahren
DataGrid: Daten bei großen Datenmengen dynamisch beim Scrollen nachladen

Hallo!

Ich habe in meiner Anwendung eine Ansicht in der der Nutzer ziemlich große Datenmengen in einem DataGrid ansehen kann. Da sind z.B. 10.000 Zeilen keine Seltenheit.
Aktuell wurde es so gelöst das über einen Count die Anzal aller verfügbaren Datensätz ermittelt wird und der Benutzer sich dann 'seitenweise' durchklicken kann.
Nehmen wir zum Beispiel an das pro Seite 50 Datensätze angezeigt werden dann hätten wir bei 10.000 Datensätz insgesamt 200 Seiten. Jedesmal wenn der Nutzer also zur nächsten Seite (oder eben einer bestimmten) springt dann werden von der Datenbank eben nur die 50 Datensätze abgefragt die tatsächlich benötigt werden. Das schont den Arbeitsspeicher und die Ladezeiten der Datenbank sind auch deutlich kürzer.

Nun wird gewünscht dass das Ganze etwas einfacher für den Nutzer werden soll und das bisherige System durch eines ersetzt werden soll dass die Daten dynamisch nachläd sobald der Benutzer die Scrollbar bedient.
Ich könnte wetten das ich nicht der erste bin der so ein Problem hat. allerdings konnte ich kein passendes Tutorial oder ähnliches finden?

Hat jemand von euch einen Tip oder eigene Erfahrungen mit dem Thema. Gibt es evtl. noch alternative Ansätze wie der Benutzer effizient durch große Datenmengen navigieren könnte?

Viele Grüße

Ralf

3.003 Beiträge seit 2006
vor 7 Jahren

Mit WPF ziemlich trivial.

WPF: Data Virtualization

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

5.299 Beiträge seit 2008
vor 7 Jahren

Gibt es evtl. noch alternative Ansätze wie der Benutzer effizient durch große Datenmengen navigieren könnte? Bitteschön: Ein alternativer Ansatz: AutoCompletion advanced

Der frühe Apfel fängt den Wurm.

F
10.010 Beiträge seit 2004
vor 7 Jahren

Wir benutzen da https://datavirtualization.codeplex.com/
Ist recht einfach zu benutzen.

M
48 Beiträge seit 2011
vor 7 Jahren

Bei der Lösung welche LaTino verlinkt hat steht unten in den Kommentaren:
No longer works with .NET 4.6.1
Der Autor Paul McClean schreibt selbst am Ende seines Artikels:
Since I first published this article, Bea Stollnitz has published a much more comprehensive and complete solution to data virtualization. I would refer readers to her solution.

Die Links zur Lösung von Bea Stollnitz funktionieren leider nicht mehr. Jedenfalls werden bei der Lösung die FZelle verlinkt hat, ebenfalls zwei Links gepostet die zu einer Website von Bea Stollnitz führen sollten, die leider auch nicht funktionieren:
Although looks alike, this solution is totally different from Vincent Van Den Berghe's! (http://bea.stollnitz.com/files/52/DataVirtualization.pdf, http://bea.stollnitz.com/blog/?p=344)

Die neuste Lösung (Version 1.2.0 vom 31.03.2015) die ich gefunden habe ist Virtualizing Observable Collection. Auf der Projektseite Virtualizing Data with XAML wird wieder von der Lösung von Bea Stollnitz geschrieben:
I have to thank Bea Stollnitz for providing the inspiration to actually address this issue (http://www.zagstudio.com/blog/498 and http://www.zagstudio.com/blog/378).

Eine Schande ist aber dass es keine Lösung von Microsoft gibt. Ein neues Prinzip dass Microsoft propagiert ist "fast and fluid". Wie soll ein Programm "fast and fluid" sein wenn es im .NET Framework keine Lösung gibt um Daten an WPF oder UWP-Apps zu binden und virtuell nachzuladen?

3.003 Beiträge seit 2006
vor 7 Jahren

Ich poste mal kommentarlos das Ergebnis von 20 sekunden Suche nach dem verschollenen Artikel von Bea stollnitz: http://web.archive.org/web/20111210013355/http://bea.stollnitz.com/blog/?p=344

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

3.003 Beiträge seit 2006
vor 7 Jahren

Ich beantworte mich mal selbst war gestern nur fix mit dem Handy drin, zu mehr als den Link zzu suchen und zu posten hat's nicht gereicht 😉.

Bei der Lösung welche LaTino verlinkt hat steht unten in den Kommentaren:
No longer works with .NET 4.6.1

Weil mit 4.6.1 das Verhalten des virtualizingstackpanel verändert wurde. Allerdings gibt es glücklicherweise keinen breaking change, ohne dass man nicht auch einen Workaround anbietet. In solchen Fällen lohnt ein Blick in die reference source des Frameworks. Und dort findet sich folgender Kommentar:


       // VirtualizingStackPanel added support for virtualization-when-grouping in 4.5,
        // generalizing and subsuming the support for virtualizing a TreeView that existed in 4.0.
        // The 4.5 algorithm had many flaws, leading to infinite loops, scrolling
        // to the wrong place, and other bad symptoms.  DDCC is worried that fixing
        // these issues may introduce new compat problems, and asked for a way to opt out
        // of the fixes.  To opt out, add an entry to the <appSettings> section of the
        // app config file:
        //          <add key="IsVirtualizingStackPanel_45Compatible" value="true"/>

Mir war das selbst unbekannt, von daher danke für den Hinweis. Wir werden das (notgedrungen) auch testen. Bis das ein anderes Ergebnis bringt, gehe ich davon aus, der Artikel auf CodeProject, den ich verlinkt hatte, weiterhin funktioniert.

(Das Thema ist auch nicht wirklich komplex genug, um sich nicht im Notfall einen eigenen Datenprovider zu schreiben. Sollte der Workaround nicht funktionieren, kommt das sowieso auf mich zu 😉 Und solang FZelle nicht das Gegenteil sagt, vertraue ich auch darauf, dass das von ihm empfohlene Projekt tut, was es soll. Die zur Verfügung stehenden Optionen sind also nicht gerade wenige.)

Viel Glück.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

F
10.010 Beiträge seit 2004
vor 7 Jahren

Als ich geantwortet habe stand hier nicht nichts von 4.6.x
Wir benutzen 4.6.x nicht. ( wir benutzen auch noch VS2012, bis das 1.0 Release raus ist ).

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 7 Jahren

Wow, das ist einiges an Input, da muss ich mich erst mal durchkämpfen...

5.299 Beiträge seit 2008
vor 7 Jahren

Beachte, dass meine "Alternative" ein anders, aber damit zusammenhängendes Problem focussiert: Nicht, Daten zu virtualisieren, sondern die Daten dann auch für einen menschlichen User einigermassen durchsuchbar zu machen.

Der frühe Apfel fängt den Wurm.