![]() |
Virtual TreeView
Hi, Guten Morgen @all
Kennt sich hier jemand mit der Virtual TreeView aus? Ich habe bissher die Daten mit unten stehendem Code in eine TListView Komponente eingelesen. Bei vielen Datensätzen ist das jedoch relativ langsam. Jetzt habe ich etwas über die VirtualTreeView gelesen. Diese soll schneller und flexiebler sein. Ich habe mir das Tutorial dazu angesehen, komme aber nich damit klar. Kann mir mal jemand an unten stehendem Beispiel erklären wie ich die Daten anstelle des TListView(lvAnzeige) jetzt in die VirtualTreeView bekomme? Hier ein Link zu der Komponente : ![]()
Delphi-Quellcode:
procedure TForm1.bSucheClick(Sender: TObject);
var ListItem : TlistItem; begin dbMain.HostName:=edServer.Text; //Server dbMain.User:=edLogin.Text; //Benutzername dbMain.Password:=edPassword.Text; //Passwort dbMain.Database:=edDB.Text; //Name der Datenbank dbMain.Connected:=True; //Verbindung herstellen lvAnzeige.Items.Clear; try qrMain.SQL.Text := 'SELECT ' + 'T.Order_Type,' + 'T.Customer_Number,' + 'T.Order_Number,' + 'T.First_Event,' + 'T.PrePrint,' + 'T.Print,' + 'T.Cewe_Batch,' + 'T.Iqena_Batch,' + 'T.BMSLogout,' + 'K.Na,' + 'K.Customer_Number,' + 'K.Str,'+ 'K.Ort,' + 'K.Tel,' + 'K.PFD,' + 'K.Fach_TAG,' + 'K.Fach_NAcht,' + 'K.Ap,' + 'K.PLZ ' + 'FROM ' + 'table_ordertracking T,' + 'kundenmg K ' + 'WHERE ' + 'T.Customer_Number=K.Customer_Number ' + 'AND ' + 'T.Customer_Number like ''' + edknr.Text + '''"%" ' + 'AND ' + 'T.Order_Number like ''' + edatnr.Text + '''"%" ' + 'ORDER BY ' + 'T.Order_Number;'; qrMain.Open; qrMain.FieldByName('Order_Type').AsString; gauge1.Visible:= True; gauge1.maxvalue := qrMain.recordcount; while not qrMain.Eof do begin ListItem := lvAnzeige.Items.Add; ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString; ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString); ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime)); ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString); ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString); ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString); gauge1.progress := gauge1.progress + 1; qrMain.Next; end; gauge1.progress := 0; gauge1.Visible:= false; finally dbMain.Connected:=False; //Verbindung trennen end; end; Gruß CelinaW |
Re: Virtual TreeView
Hai celinaw,
mit dem Virtual TreeView habe ich auh noch nicht gearbeitet. Aber Du solltest beim zufügen von vielen Daten zu einem TListView auf jeden Fall ein Items.BeginUpdate und Items.EndUpdate verwenden. |
Re: Virtual TreeView
Hi Sharky
Bin leider noch Delphi Newbie. Zitat:
Dabei ist dieses Forum übrigens eine Super Hilfe :thuimb: Muss allen hier mal ein Dickes Lob aussprechen. :love: :hello: :hello: Wenn du mir das etwas genauer erklären könntest :oops: wäre ich dir dankbar. Gruß CelinaW |
Re: Virtual TreeView
Zitat:
Einem ListView kannst Du sagen das es nicht jedesmal wenn Du ein Item hinzufügst oder änderst die Anzeige aktualisierst. Dies benötigt nämlich relativ viel Zeit. Zitat:
Delphi-Quellcode:
begin
lvAnzeige.Items.BeginUpdate; // Verhindert das die Anzeige aktualisiert wird. // Hier jetzt // Die Daten aus deiner Datenbank // eintragen lvAnzeige.Items.EndUpdate; // Erst jetzt die Anzeige aktualisieren. end; |
Re: Virtual TreeView
For der Schleife, in der du die Items hinzufügst schreibst du:
Delphi-Quellcode:
Dies hat den Vorteil, dass dein ListView nicht immer wieder neugezeichnet wird, sondern erst wenn alle Einträge hinzugefügt wurden.
lvAnzeige.Items.BeginUpdate;
danach lvAnzeige.Items.EndUpdate; |
Re: Virtual TreeView
:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Vielen Dank! Das werde ich auf jedenfall mal so machen. Dennoch hoffe ich das mir das mal jeman mit der VirtualTreeView erlärt. Diese hat nähmlich einige Extras die ich bei der TListView vermisse. Beispielsweise kann man hiermit Spalten ausblenen. Bei der TListView kann man das nur umständlich über die "Width" Einstellung machen. Erst aml Vielen Dank für deine Erklärung und das Beispiel :thuimb: Gruß CelinaW |
Re: Virtual TreeView
Also in meinem Fall ist es dann so?! :thuimb:
Delphi-Quellcode:
Hab ich das richtig verstanden?
while not qrMain.Eof do
begin lvAnzeige.Items.BeginUpdate; ListItem := lvAnzeige.Items.Add; ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString; ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString); ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime)); ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString); ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString); ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString); gauge1.progress := gauge1.progress + 1; qrMain.Next; lvAnzeige.Items.EndUpdate; end; |
Re: Virtual TreeView
Zitat:
Delphi-Quellcode:
lvAnzeige.Items.BeginUpdate; // Bevor neue Einträge reinkommen
while not qrMain.Eof do // Jetzt kommen die Daten begin ListItem := lvAnzeige.Items.Add; ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString; ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString); ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime)); ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString); ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString); ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString); ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString); gauge1.progress := gauge1.progress + 1; qrMain.Next; end; // Alle Daten sind eingefügt lvAnzeige.Items.EndUpdate; // NACH dem ALLE neuen Einträge eingefügt wurden. |
Re: Virtual TreeView
:oops: :oops: :oops: :oops: :oops:
:angle2: Ups, hört sich logisch an! Sehr schön! Ist jedenfalls schon einmal schneller geworden :thuimb: Vielen Dank :hello: |
Re: Virtual TreeView
Zitat:
Bevor Du dir jetzt einen Wolf programmierst um ein anderes TreeView zu füllen würde ich ersteinmal testen ob der Flaschenhals nicht die Datenbank ist. Du kann ja einfach mal in einer Schleife 1000 Einträge in die TreeView machen und dies dann mit dem füllen aus der DB vergleichen. Ich gehe nämlich davon aus das es auch mit dem Virtual TreeView nicht schneller wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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