AGB  ·  Datenschutz  ·  Impressum  







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

TListView ... sehr viele Einträge

Ein Thema von cheatzs · begonnen am 22. Mär 2004 · letzter Beitrag vom 8. Nov 2005
Antwort Antwort
Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#1

TListView ... sehr viele Einträge

  Alt 22. Mär 2004, 19:09
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
Thomas Low
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#2

Re: TListView ... sehr viele Einträge

  Alt 22. Mär 2004, 19:17
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;
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: TListView ... sehr viele Einträge

  Alt 22. Mär 2004, 19:18
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TListView ... sehr viele Einträge

  Alt 23. Mär 2004, 07:07
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 Virtual TreeView von Mike Lischke oder die Tree/Listcontrols vom ElPack). Beide Controls bieten auch für 100.000 Einträge gute Performance.
  Mit Zitat antworten Zitat
Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#5

Re: TListView ... sehr viele Einträge

  Alt 23. Mär 2004, 14:13
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
Thomas Low
THX und viel Spaß beim Coden
Cheatzs
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: TListView ... sehr viele Einträge

  Alt 23. Mär 2004, 14:44
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
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von cheatzs
cheatzs

Registriert seit: 31. Aug 2003
Ort: Altenburg
81 Beiträge
 
#7

Re: TListView ... sehr viele Einträge

  Alt 23. Mär 2004, 15:28
Hi neolithos,
vielen Dank.
Das war genau das, was ich gesucht habe!

Bye
Thomas Low
THX und viel Spaß beim Coden
Cheatzs
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#8

Re: TListView ... sehr viele Einträge

  Alt 23. Mär 2004, 19:08
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 !
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: TListView ... sehr viele Einträge

  Alt 8. Nov 2005, 15:48
Hallo,

ich habe eine Frage dazu:

So fülle ich die ListView:

Delphi-Quellcode:
ListView2.Items.Count := Length(RegExArray);
ListView2.Repaint;
Ich habe OwnerData auf true und im OnData steht folgendes:

Delphi-Quellcode:
procedure TFormMain.ListView2Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption := 'hallo';
end;
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?


Nachtrag: Ich weiß nicht, woran es lag, aber ich habe die Komponente entfernt, neu auf's Formular gezogen und dann ging's.

Nachtrag 2: Es geht mir vsReport nicht, daran liegt's.
  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 21:07 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