AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Virtual String Tree Objekte dynamisch nachladen
Thema durchsuchen
Ansicht
Themen-Optionen

Virtual String Tree Objekte dynamisch nachladen

Ein Thema von etom291272 · begonnen am 5. Jun 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#1

Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 12:22
Hallo DpLer

Habe ein kniffliges Problem für euch.

In meiner Dokumentenmanegement Software (zu 100% in Delphi geschrieben [Delphi rules ]) verwende ich häufig die Virtual string Tree Komponente vom Mike Lischke. In einer der Ansichten wird eine komplette Übersicht über den Dokumenteingang dargestellt. Das heist es werden alle Dokumente nach alter die jemals mit dieses System erstellt wurden in diesem Virtual String Tree dargestellt. Dabei wird einfach von einem Sql Server eine View in ein Dataset geladen und vom ersten bis zum letzten durchgelaufen.
Da das System für 500.000 Dokumente ausgelegt ist muss ich die Datensicht entsprechend eingrenzen sonst dauert das laden dieser Liste ewig
Zur Zeit löse ich das einfach mit einem einstellbaren Top Statement.

Ich hätte aber gern das am Anfang ca 1000 Doks geladen werden und wenn der Benutzer nach unten scrollt
und bei dieser liste ganz unten angekommen ist weitere 1000 automatisch nachgeladen werden. das heist ich müsste irgendwie erkennen wenn die listview ganz unten ist und der benutzer wieder nach unten scrollen will.

Gibt es da irgend eine Möglichkeit
Bin für jeden Vorschlag dankbar
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 12:43
Ich habe das mal gemacht, aber ohne eine Virtual String TreeView. Sonder mit der Normalen.
Ich hatte aber nur ca. 20 Einträge unter der Wurzel. (Level 1)
Jeder Knoten hat ein Dummy-Kind (Ein Child-Knoten mit Node.Tag = 1)
Im OnExpand-Ereignis der TreeView habe ich geschaut, ob die Tag-Eigenschaft des ersten Kind des zu expandierenden Knotens den Wert 1 hat. Wenn ja, wurde der Knoten wohl noch nicht expandiert. Also lade ich die Kinder dieses Knotens.
Jedes Kind des Knotens bekommt ein Dummy-Kind (ein Child-Knoten mit Node.Tag = 1).
Usw. Ich hatte 3 Millionen Datensätze, die so darzustellen waren. Natürlich war das blöd, wenn der anwender alle Knoten geöffnet hat, aber wer macht das schon. Schliesslich hätte er dann alle 300.000 Väter anfassen müssen.

Aber, ich such mir die VirtualStringTree Komponente mal raus, weil ich in meinem aktuellen Projekt 500.000 Knoten in Level 1 habe. Und das nervt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#3

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 13:32
Hallo,
Zitat von alzaimar:
...
Jeder Knoten hat ein Dummy-Kind...
um das "+"-Zeichen im TreeView darzustellen, muss kein Dummy-Kind angelegt werden.
Wenn man TTreeNode.HasChildren auf True setzt wird das "+"-Zeichen dargestellt, auch wenn noch kein untergeordnetes Objekte vorhanden ist.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#4

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 15:04
@alzaimar

vielen dank für deinen Beitrag. das mit dem dynamischen Nachladen der Kinder eines Knotens habe ich ähnlich gelöst. ich lese aus der Db aus ob bei einem entsprechenden Knoten Kinder vorhanden sind wenn ja wird ein dummy child angelegt und im onexpand des Trees die wirklichen Kinder dieses Levels nachgeladen.

Bei meinem Problem allerdings habe ich keine Kinder also auch kein onexpand ereignis weil sich die
ganze Liste eigentlich wie ein stringgrid verhält und sich alles in level 0 abspielt

(hab die vst für diese Lösung anderer Komponenten vorgezogen. wäre ja mit der delphi Listview (war um 500% langsamer) oder mit stringgrid auch gegangen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 15:22
Äch sö: Da habe ich dann ein TStringGrid genommen und einfach dynamisch nachgeladen. Wenn Du mit der MSDE arbeitest, dann setzt Du den Clustered Index auf das Feld, das bei Dir die Ordnung beschreibt. Dann schreibst Du Dir eine Stored Procedure:
SQL-Code:
Create Procedure GetTablePacket @StartID int, @Count int as
select top @Count * From MyTable Where ID >=@StartID
Da die MyTable nach ID sortiert ist (durch den clustered index), spart sich die MSDE den Sortiervorgang und Du kannst ohne jegliche Verzögerungen ziemlich resourcenschonend (auf Serverseite!) durch die Tabelle scrollen.

[edit]
Bei anderen DB musst du einfach schauen, über welchen Index bzw. Feld (AutoInc? Primary Key?) Du am einfachsten sortiert auf die Tabelle zugreifen kannst.
[/edit]

Falls Du ein Budget hast, schau Dir mal die QuantumGrid Suite von Developer Express an. Deren Grid kann mit TDatasets und auch ohne. Wenn man das datensensitiv anpackt kann man dem Teil sagen, das es bitte dynamisch laden soll. Dann kann man zwar einige Gimmicks nicht machen, wie nach Spalten sortieren und live filtern (wie z.B. Access oder Excel), aber ansonsten ist es ziemlich geil. Nebenbei kann man noch direkt Master-Detail Beziehungen einbauen. Dann hat jedes Record einen kleinen Expand-Button. Wenn man den anklickt, öffnet sich unter dem Record die Detail-Tabellen. Das Ding kostet ca. 300 Öcken. (www.devexpress.com) Trialversionen gibts nich, aber ne Demo. Die is ziemlich geil.

@Lannes: Danke für den Tip mit dem HasChildren := True.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#6

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 15:54
hy das mit dem index ist schon klar. Hab eine DokumentID mit der ich leicht die richtigen records bekomme. obwohl ich die stringgrid komponente eigentlich nicht verwenden möchte interessiert es mich doch wie du das mit dem dynamisch nachladen gemacht hast. könntest du das bitte ein wenig genauer beschreiben.

wie gesagt möchte es mit der vst kompo lösen also wenn liste ganz unten ist (auch wenn keine zeile im string tree markiert ist) und der benutzer weiter nach unten scrollt sollen weitere x records nachgeladen werden.

  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 22:02
wenn du die gesamt anzahl hast füge einfach soviele nodes ein.
im on init oder beim ersten "gettext" für den node lädst du diesen dann.
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#8

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 22:14
@generic

Danke für diesen Tipp der hört sich genial an

werde das diese woche mal in angriff nehmen und ausprobieren
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#9

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 5. Jun 2005, 22:20
@ generic

habe mal kurz drüber nachgedacht

wenn ich angenommen im meinem recordset 15.000 dokumente vom sql server erhalte ist es ja kein problem
mit recordcount diese 15000 nodes einzufügen aber

wenn der benutzer nach unten scrollt woher sollen die neuen nodes wissen welches dokument sie laden müssen (muss ja eine reihenfolge haben)

aktiviert der benutzer eine spaltensortierung würden dann ja warscheinlich die leeren nodes sortiert werden oder aber es werden dann alle geladen (das wäre kein problem)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Virtual String Tree Objekte dynamisch nachladen

  Alt 6. Jun 2005, 14:34
im falle einer sortierung würde alle nodes geladen bzw. das node init aufgerufen.
wenn du eine sortierung vorgibts kannst du diese mit dem sql sortieren.
die datenmenge müsste dann "open" bleiben.
in jedem "oninitnode" würde dann aus der datenmenge ein weiter datensatz (row) geladen.

btw. ich bezweifel das ein user jemals mehr als 100 einträge sehen will. mehr sind nicht nutzbar.
du solltest dann mehr mit filtern arbeiten.

btw. ich hab mit delphi und mssql ein dms geschrieben. derzeit sind dort ca. 600000 dokumente drin.
ich hab dir mal einen screen dran gehängt.

alle listen/bäume = vst

[edit]

ach ja, die grundinfos sind in der regeln nicht gross. datum, name, beschreibung usw. ich denke bis ca. 10000 stück kann man die auch immer mit reinladen. die bilder oder was auch immer dann on demand
Miniaturansicht angehängter Grafiken
demo_318.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:17 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