![]() |
ListView: Nur die sichtbaren Listitems anzeigen
Ich hab in einer Report-Listview ca 8000 Datensätze und stelle fest, das das Füllen der Listview doch sichtbar Zeit benötigt. Ich habe Virtual Listviews ausprobiert, aber immer fehlt irgendwas.
Gibt es eine Möglichkeit nur die sichtbaren ListItems zu laden und dann bei Bedarf bei Tastatur- oder Mauseingabe die nächsten für die Sichtbarkeit erforderlichen ListItems nachzuladen? Das wäre doch eine elegante Methode große Listviews adäquat anzuzeigen. Weiss jemand, ob es sowas gibt? |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Als Benutzer fände ich es alles andere als angenehm, riesige Listen mit tausenden Einträgen vorgesetzt zu bekommen und mich mit millimetergroßen Scrollbalken herumzuplagen. Sollte man das nicht vielleicht besser filtern lassen und maximal n Einträge ausgeben?
8.000 Items dauern (Style: vsReport, keine Sortierung) bei mir 400ms auf 32 Bit und 270ms auf 64 Bit. Egal ob Delphi oder C++. Ich finde das eigentlich noch im Rahmen. Hier noch ein paar Stolperfallen (fehlendes Begin/EndUpdate(), ...): ![]() |
AW: ListView: Nur die sichtbaren Listitems anzeigen
So als Tipp:
Delphi-Quellcode:
Das beschleunigt den Vorgang ungemein.
ListView.Items.BeginUpdate;
// ListView füllen ListView.Items.EndUpdate; |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Zitat:
![]() ![]() ![]() |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Das "Einfassen" in Beginupdate und Endupdate ist Standard, sonst gäbe es ja beim Listview Aufbau ein elendes Geflackere.
Leider kann ich die Listview nicht filtern, da ich vorher nicht weiss, was der Benutzer sich ansehen will (Liste von Mails). Ich habe vor einiger Zeit mal sowas gesehen, wie ich es mir wünsche. Ich brauche ja erstmal nur die anzuzeigenden Daten in der Listview. Erst wenn eine Scrolländerung vorliegt, müssen neue ListItem-Einträge "nachgeladen" werden. |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
|
AW: ListView: Nur die sichtbaren Listitems anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Also eine Eigenschaft die ListItems unsichtbar macht, ist mir nicht bekannt. Du kommst also um das Filtern nicht herum.
Das Geheimnis ist Virtual ListView, oder du lädst jedes mal die komplette ListView neu. Anbei ein kleines Beispiel mit 8000 Einträgen. Es nutzt ListView virtual und arbeitet mit zwei Listen. Die erste Liste enthält alle Daten, die zweite Liste die gefilterten. ListView greift dann virtual auf die zweite Liste zu. Das Ganze kann man natürlich noch ausbauen, ist ja nur ein Beispiel. |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Zitat:
![]() Im Grunde genommen ist aber eine Virtual ListView besser, weil flexibler, bzw. das betreffende Projekt füllt die Items nach und nach mit Daten, Virtual ListView zeigt nur die Daten Items an die sichtbar sind. |
AW: ListView: Nur die sichtbaren Listitems anzeigen
Vielen Dank für die Infos. Ich werde die Tipps jetzt mal ausprobieren.
|
AW: ListView: Nur die sichtbaren Listitems anzeigen
Wobei das Beispiel in #7 auch mit einer Liste lösbar ist. Statt die erste Liste erst filtern und in zweite Liste kopieren, kann man auch nur die erste Liste nutzen. Dann muss man im ersten Durchgang aber erst die Menge der gefilterten Einträge ermitteln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz