AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView: Nur die sichtbaren Listitems anzeigen

Ein Thema von Gerd01 · begonnen am 4. Apr 2014 · letzter Beitrag vom 6. Apr 2014
Antwort Antwort
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#1

ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 10:56
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?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 11:57
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(), ...): http://stackoverflow.com/q/9008310/2298252
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 11:59
So als Tipp:
Delphi-Quellcode:
ListView.Items.BeginUpdate;
// ListView füllen
ListView.Items.EndUpdate;
Das beschleunigt den Vorgang ungemein.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 13:02
Das wäre doch eine elegante Methode große Listviews adäquat anzuzeigen. Weiss jemand, ob es sowas gibt?
Zufällig wurde vor etwa einer Woche das Thema durchgekommen, wobei es hier zwar um Dateinamen ging, aber ListView ist es im Grunde egal was es darstellt. Zumindest wurden in dem Thread mehrere Möglichkeiten durchgenommen, von klassisch, virtuale ListView bis Mischformen.

http://www.delphipraxis.net/179651-l...ert-lange.html
http://www.delphipraxis.net/179644-l...-machen-3.html
http://www.delphipraxis.net/179669-v...nzufuegen.html
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#5

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 18:07
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.
  Mit Zitat antworten Zitat
ol1uw

Registriert seit: 24. Jul 2004
Ort: Freiberg
69 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 19:26
Leider kann ich die Listview nicht filtern, da ich vorher nicht weiss, was der Benutzer sich ansehen will (Liste von Mails).
da bin ich mal optimistisch und sage aber der Benutzer sollte es wissen

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?
eine Art Seitenmodus vielleicht siehe Anhang
Miniaturansicht angehängter Grafiken
dplvp.png  
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 19:39
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.
Angehängte Dateien
Dateityp: zip Virtual ListView Filtern.zip (2,5 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 4. Apr 2014, 20:49
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?
Die Frage habe ich überlesen. In dem Beitrag http://www.delphipraxis.net/1252959-post16.html habe ich eine Lösung die in etwa dem entspricht was in der Frage steht. Es werden zuerst leere Items angelegt und erst dann gefüllt wenn sie angezeigt werden.

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.
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#9

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 6. Apr 2014, 09:14
Vielen Dank für die Infos. Ich werde die Tipps jetzt mal ausprobieren.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: ListView: Nur die sichtbaren Listitems anzeigen

  Alt 6. Apr 2014, 14:51
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz