![]() |
Hilfe zu VirtualTreeview Rootnodecount
Hi,
ich brauch mal kurz etwas Schützenhilfe, stehe etwas auf dem Schlauch beim VST. Ich muß ein VST "Live" updaten. Ich erhalte von meinem DBMS immer die aktuelle Anzahl Record (RecordCount). Die DB wird extern geändert, also kann ich keine DB-Events nutzen. Wie kann ich nun einfach das VST RootNodeCount gegen RecordCount prüfen und das VST -effektiv- updaten. Sprich wenn ich vorher 10000 records hatte und nun 12000, daß er nur die 2000 zufügt bzw. Initialisiert? Derzeit aktualisiere ich per:
Delphi-Quellcode:
Hier habe ich das Problem, daß bei jedem -ersten- Update ein Eintrag im VST doppelt ist. In der DB ist alles ok.
vstMainGrid.BeginUpdate;
// vstMainGrid.Clear; // geht auch ohne... vstMainGrid.RootNodeCount := GUIMainTable.RecordCount; vstMainGrid.SortTree(vstMainGrid.Header.SortColumn, vstMainGrid.Header.SortDirection, True); vstMainGrid.EndUpdate; Wie macht ihr ein Live-Update des VST? Jetzt liegt alles in einem Timer der RootNodeCount <> RecordCount prüft. Nicht schön (wg. Timer), aber es geht bis auf den doppelten Eintrag. Gruß winkel79 [edit]Kürzer, Verständler, Besser: Thread 2.0[/edit] |
Re: Hilfe zu VirtualTreeview Rootnodecount
Bin gerade dabei ein Applicationserver zu schreiben, welcher auf einen Client einen VST aktuallisieren muss. (datenändern, hinzufügen und löschen)
Der Server erzeugt von seinen Daten eine Art Diff. Dieses schickt er zum Client. Der Client durchläuft dann jeden Diffdatensatz, versucht dabei einen Knoten mit der gleich ID zu finden. Dann ändert er die Daten oder löscht den Knoten. Ist kein Knoten da, ist es ein neuer Datensatz. |
Re: Hilfe zu VirtualTreeview Rootnodecount
Hallo generic,
danke für die Antwort. Zitat:
Zitat:
Ich teste gerade einen anderen Lösungsansatz, bekomme aber hier mit dem OnInitNode Probleme. Wie kann man das anders machen:
Delphi-Quellcode:
Ich habe versucht, einfach MeineTabelle.RecNo auf Node.Index zu setzen (mit Größenprüfung) und Eof/Next wegzulassen. Dann erhalte ich bei Vergrößerung des RootNodeCount von z.B. 2000 auf 2500 aber nur gleiche Werte von 2001 bis 2500.
var
Data: PMyData; begin inherited; Data := Sender.GetNodeData(Node); Initialize(Data^); Data.ID := MeineTabelle.FieldByName('MeineID').AsInteger; Data.Text := MeineTabelle.FieldByName('MeinText').AsWideString; if not MeineTabelle.Eof then // <- das möchte ich ablösen MeineTabelle.Next; // <- "" - "" end; Ideen? Ich habe schon im VTV Tut, den DB Beispielen (Extensive und Basic), den Yahoo Archiven und bei DP gesucht. Aber diesen Ansatz scheint keiner vorher mal gemacht zu haben... Gruß winkel79 |
Re: Hilfe zu VirtualTreeview Rootnodecount
So, selbst gelöst...
Einfach das OnInitNode wie beschrieben angepasst. Statt Eof/Next auf den selected Record und mit RangeCheck. Dazu das Clear vom VST weg und es rennt sehr schnell. Trotzdem danke. Gruß winkel79 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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