Delphi-PRAXiS
Seite 2 von 2     12

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid in Treeview zeigen (https://www.delphipraxis.net/91307-stringgrid-treeview-zeigen.html)

DavidKlimas 3. Mai 2007 19:32

Re: StringGrid in Treeview zeigen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hier ist das Beispiel :

Bin für hilfe dankbar...

DavidKlimas 3. Mai 2007 20:59

Re: StringGrid in Treeview zeigen
 
OK. Ich habs. Wie schon vorgeschlagen, wird der letzte eintrag wird immer seperat behandelt...

Lannes 3. Mai 2007 21:42

Re: StringGrid in Treeview zeigen
 
Hallo,
Zitat:

Zitat von DavidKlimas
...das StringGrid hat mehrere Tausend einträge...

falls du meine vorgeschlagene Vorgehensweise mit der Funktion genommen hast würde ich das bei einer so hohen Zeilenanzahl noch optimieren.

StringGrid.Rows ist vom Typ TStrings, der vor der Übergabe an die Funktion zu einen String zusammengesetzt wird, dieser String wird dann innerhalb der Funktion wieder aufgedröselt.
Änder doch die Funktion so ab das StringGrid.Rows direkt übergeben werden kann.
Außerdem könnte "case AddType of..." aus der Funktion überflüssig sein.

DavidKlimas 4. Mai 2007 11:31

Re: StringGrid in Treeview zeigen
 
Da ich in den ersten zwei spalten jeder zeile andere Infos hab, Hab ich die Rows-Funktion schon rausgenommen. Die AddType hab ich mitlerweile auch rausgenommen, trotzdem braucht das programm ne viertel stunde zum laden...

Ansonsten läufts super...

Lannes 4. Mai 2007 18:11

Re: StringGrid in Treeview zeigen
 
Hallo,

ein viertel Stunde, das dauert eindeutig zu lange. :shock:
Wieviel Einträge sind es denn 1000, 2000 oder eher 100000?

Werden BeginUpdate und EndUpdate in Deinem Code genutzt?
Wie sieht denn jetzt die abgespeckte Version der Funktion und deren Aufruf aus?

Wenn man da nichts mehr verbessern kann bietet es sich an nur die erste Ebene der Nodes bei der Initialisierung in das TreeView zu laden und die weiteren Ebenen erst auf Anforderung, also wenn der User einen Node expandiert.

Zip doch mal die Daten aus dem StringGrid(am besten als csv oder ähnlich) sowie Deinen aktuellen Code und poste sie hier, dann kann man auf der Grundlage eventuell einen performanteren Vorschlag machen.

DavidKlimas 4. Mai 2007 18:24

Re: StringGrid in Treeview zeigen
 
weiter oben hatte ich das programm schon als download eingetragen. Ist jedoch nicht mehr auf den neusten stand. Im StringGrid sind 350 zeilen zu 62 spalten (ungefähr). Jede zelle gib einen Index aus der in einer Datenbank mit 2700 zeilen ausgesucht werden muss...

DavidKlimas 5. Mai 2007 09:01

Re: StringGrid in Treeview zeigen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Die Daten im StringGrid sind die Selben wie in der beigefügten Datenbenk (lines). Jeder Eintrag aus der Datenbank "Lines" ist ein Index, dessen StringWert in der 2.Datenbank "City" (Passwort = HausBau) gesucht werden muss. Im StringGrid sind demnach anstelle der Index-Werte die StringWerte.

Lannes 5. Mai 2007 22:45

Re: StringGrid in Treeview zeigen
 
Hallo,

Zitat:

Zitat von Lannes
Zip doch mal die Daten aus dem StringGrid(am besten als csv oder ähnlich) sowie Deinen aktuellen Code und poste sie hier, dann kann man auf der Grundlage eventuell einen performanteren Vorschlag machen.

hab mal deinen älteren Code überflogen.
Da werden Daten aus der Datenbank in ein verborgenes StringGrid geschrieben um sie dann an ein TreeView zu übergeben :gruebel:
>> siehe Kommentar
Delphi-Quellcode:
  TreeView1.Items.BeginUpdate;//vor der Schleife = ok
  TreeView1.Items.Clear;
  for z := 0 to DKStringGrid4.RowCount - 2 do
  begin
    If StrToInt(DKStringGrid4.Cells[0,z]) = ComboBox1.ItemIndex+ 1 then
    begin
      i := 2;
      For i := 2 to StrToInt(DKStringGrid4.Cells[1,z])+1 do
      begin
        CityTable.Locate('Index', DKStringGrid4.Cells[i,z] ,[]);
        Str1 := CityTable.FieldByName('City').AsString;
        Str1 := Str1 +' ('+CityTable.FieldByName('Station').AsString+')';
        s := s + Str1+ #09;
        Application.ProcessMessages;  //imho überflüssig    
      end;
      AddTreeNodePathDupIgnore(TreeView1,s,#09,ReNode,AddSort);
      s := '';
      TreeView1.Items.EndUpdate;  //Innerhalb der Schleife ??? 
      Application.ProcessMessages; //imho überflüssig
    end;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.
Seite 2 von 2     12

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf