AGB  ·  Datenschutz  ·  Impressum  







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

Virtual TreeView

Ein Thema von celinaw · begonnen am 25. Apr 2004 · letzter Beitrag vom 27. Apr 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

Virtual TreeView

  Alt 25. Apr 2004, 10:16
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 : http://www.lischke-online.de/VirtualTreeview/VT.php



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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Virtual TreeView

  Alt 25. Apr 2004, 10:29
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#3

Re: Virtual TreeView

  Alt 25. Apr 2004, 10:43
Hi Sharky

Bin leider noch Delphi Newbie.

Zitat:
Items.BeginUpdate und Items.EndUpdate
Sorry, aber das sagt mir nichts. Ich habe hier einige Delphi Bücher liegen und versuche halt fleißig zu lernen.
Dabei ist dieses Forum übrigens eine Super Hilfe
Muss allen hier mal ein Dickes Lob aussprechen.
Wenn du mir das etwas genauer erklären könntest wäre ich dir dankbar.

Gruß CelinaW
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:04
Zitat von celinaw:
...Bin leider noch Delphi Newbie.....
Das waren wir alle einmal oder sind es sogar noch immer

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 von Die Onlinehilfe:
Die Methode BeginUpdate verhindert die Aktualisierung des TListItem-Objekts, bis die Methode EndUpdate aufgerufen wird.
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:06
For der Schleife, in der du die Items hinzufügst schreibst du:
Delphi-Quellcode:
lvAnzeige.Items.BeginUpdate;

danach

lvAnzeige.Items.EndUpdate;
Dies hat den Vorteil, dass dein ListView nicht immer wieder neugezeichnet wird, sondern erst wenn alle Einträge hinzugefügt wurden.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#6

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:12


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

Gruß CelinaW
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#7

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:19
Also in meinem Fall ist es dann so?!

Delphi-Quellcode:
    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;
Hab ich das richtig verstanden?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:24
Zitat von celinaw:
Also in meinem Fall ist es dann so?!
Nein! Dann würdest Du ja doch nach jedem neuen Eintrag "updaten".

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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#9

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:48


Ups, hört sich logisch an!

Sehr schön! Ist jedenfalls schon einmal schneller geworden

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Virtual TreeView

  Alt 25. Apr 2004, 11:53
Zitat von celinaw:
..Sehr schön! Ist jedenfalls schon einmal schneller geworden ...
Sehr schön! Um welchen Faktor ist es denn schneller geworden?
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 00:19 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