![]() |
TListView ... sehr viele Einträge
Hi Leutz,
hab mal ein ganz verrücktes Problem. Also die Anzeige in einem TListView mit Report als ViewStyle ist ja nicht so schwierig. Das Problem liegt bei der Anzahl der Elemente: Ich muss ziemlich viele Einträge (ca. 10000-100000) dort reinschreiben. Nun braucht das ganze schon bei 1000 Einträge ca 2 Sekunden bis das wieder aktualisiert ist (Es müssen alle Datensätze neu eingetragen werden). Ich hab alle Datensätze in einem dynamischen Array gespeichert, aus dem dann die Daten zur Anzeige genommen werden. Vielleicht kennt jemmand eine Methode um den Teil, der gerade im TListView angezeigt wird, aus dem Array zu laden ohne den Rest zu benötigen, wobei die Scrollbalken aber noch richtig anzeigen. Sodass er beim Aktualisieren und beim Scrollen nur das kleine Sichtbare stück aktualisieren muss. Wenn jemmand eine andere Möglichkeit kennt, wie man noch sehr viele Daten relativ schnell anzeigen kann - ich bin für alles offen. Danke im Vorraus Bye |
Re: TListView ... sehr viele Einträge
probier mal das:
Code:
var oldViewStyle : TViewStyle;
begin oldViewStyle := lv.ViewStyle; lv.ViewStyle := vsList; lv.Items.BeginUpdate; lv.Items.Clear; try ListViewLoadFromFile(lv, pfad); except MessageDlg('Keine Original LV Datei !', mtWarning, [mbOK], 0); end; lv.Items.EndUpdate; lv.ViewStyle := oldViewStyle; end; |
Re: TListView ... sehr viele Einträge
Bringen dich "BeginUpdate" und "EndUpdate" weiter? Ersteres wird vor dem Laden der Einträge aufgerufen und blockiert die Bildschirmausgabe. Letzteres wird danach aufgerufen und stellt den Inhalt dann sozusagen auf einen Schlag dar.
Schau mal in die Hilfe. Ich verspreche aber nicht, dass es das Allheilmittel ist. ;) |
Re: TListView ... sehr viele Einträge
Für sehr viele Elemente im ListView gibt es folgende Tipps
1, Verwendung von Begin...EndUpdate 2, Betrieb des Listviews im Virtual Modus (Demo unter Demos\VirtualListView verfügbar) 3, Verwendung eines auch mit vielen Einträgen schnellen Controls (z.B. das ![]() ![]() |
Re: TListView ... sehr viele Einträge
Hey,
danke für die Antworten: @stoxx: Das geht leider bei mir nicht, weil ich die Daten nicht vorher extra noch in eine Datei speichern kann. Ich glaube dann würde die Performance noch mehr drunter leiden. @MathiasSimmack: Danke, dies benutze ich bereits in meinen Aktualisierungen. @Bernhard Geyer: Dein 2. Methode intressiert mich sehr. Leider blicke ich in dem Beispiel nicht durch, weil damit gleich ein ganzer Explorer geschrieben wurde und ich die Sachen für den Virtuellen Modus und dem des Explorers nicht unterscheiden kann. Kennst du noch ein anderes Bsp. bzw. kannst du mir das ganze kurz mal erklären? Danke Bye |
Re: TListView ... sehr viele Einträge
Wenn du eh alle Datensätze schon in einem Array hast.
Nimm doch die OwnerData = true variante. Da muss man nur Count auf sagen wir 1000000 setzen und mit dem Ereignis OnData, die Daten geben die Dargestellt werden. Einfach und Effizient |
Re: TListView ... sehr viele Einträge
Hi neolithos,
vielen Dank. Das war genau das, was ich gesucht habe! Bye |
Re: TListView ... sehr viele Einträge
Hallo cheatzs,
das mit der Datei war doch nur ein Codestück aus meinem Proggi, Sorry, dass ich Dich verwirrt habe. Es ging doch nur darum, während des Eintragens das ViewStyle zu ändern ! |
Re: TListView ... sehr viele Einträge
Hallo,
ich habe eine Frage dazu: So fülle ich die ListView:
Delphi-Quellcode:
Ich habe OwnerData auf true und im OnData steht folgendes:
ListView2.Items.Count := Length(RegExArray);
ListView2.Repaint;
Delphi-Quellcode:
Nun ist es so, dass es die Items hinzufügt, was ich am Scrollbalken erkennen kann, doch sehe ich keinen Text in der ListView, die Caption wird also nicht zugewiesen. Setze ich in das OnData-Ereignis ein ShowMessage sehe ich den Dialog, folglich muss OnData ja ausgeführt werden. Wo liegt mein Denkfehler?
procedure TFormMain.ListView2Data(Sender: TObject; Item: TListItem);
begin Item.Caption := 'hallo'; end; Nachtrag: Ich weiß nicht, woran es lag, aber ich habe die Komponente entfernt, neu auf's Formular gezogen und dann ging's. :gruebel: Nachtrag 2: Es geht mir vsReport nicht, daran liegt's. :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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-2025 by Thomas Breitkreuz