AGB  ·  Datenschutz  ·  Impressum  







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

VirtualTreeView und Sortieren

Ein Thema von TurboMagic · begonnen am 28. Apr 2021 · letzter Beitrag vom 6. Mai 2021
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

AW: VirtualTreeView und Sortieren

  Alt 28. Apr 2021, 11:05
Zitat:
Wenn jetzt jemand zu Anzeigezwecken die Liste sortiert darf das keinen
Einfluss auf die ursprüngliche Reihenfolge haben.
Wenn du deine Nodes in einer Liste hast und diese Liste abarbeitest/ansprichst, was hoffentlich der Fall ist, hat es keinen Einfluss auf die Reihenfolge.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: VirtualTreeView und Sortieren

  Alt 28. Apr 2021, 11:43
Moin zusammen.

Warum so umständlich mit zusätzlichem Index und Spalte und was weiß ich nicht alles? Beim Erstellen der Node wird als NodeData einfach der Pointer auf das Objekt oder auf den Index in der TObjectList<T> an die Node übergeben. Somit ändert sich beim Sortieren für deine Daten gar nichts. Der NodeIndex wird zwar verändert, aber der interessiert dich dann nicht mehr. Die Daten werden in der Liste vorgehalten was auch dazu führt, dass du deinen VST beliebig oft leeren und wieder füllen kannst.

Unter keinen Umständen darfst du die Node-Daten mit einem Index oder einem Wert verknüpfen, der sich beim Ändern der Anzeige ebenfalls ändert und plötzlich dazu führt, dass Daten falsch angezeigt werden.

Das Sortieren des Trees solltest du im OnCompareNode() Event durchführen. Damit bleibt es dir überlassen nach welchen Kriterien du sortieren willst. Eventuell willst du ja beim Klick auf Spalte 1 zusätzlich noch nach Spalte 2 sortieren wenn in Spalte 1 identische Werte vorkommen können usw. Ausgelöst wird der Sortiervorgang aber über das OnHeaderClick() Event. Darin kannst du dann auch die SortDirection der Column angeben, sodass der bekannte Sortierpfeil rechts vom ColumnTitle erscheint.

Alles in allem hast du hier den Vorteil, dass du auch die Anzeige von deinen Daten weitestgehend getrennt hast. Bis auf die Verknüpfung der Node mit dem Index in der TObjectList<T> . Aber irgendwo muss ja eine Verbindung hergestellt werden.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.053 Beiträge
 
Delphi 12 Athens
 
#3

AW: VirtualTreeView und Sortieren

  Alt 28. Apr 2021, 12:23
Ok, das mit dem Index als NodeData statt eines richtigen Pointers finde ich schon besser.
Dann kann man auch problemlos CompareNode zum sortieren benutzen.
  Mit Zitat antworten Zitat
generic

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

AW: VirtualTreeView und Sortieren

  Alt 5. Mai 2021, 08:32
Mal paar andere Gedanken:

Vermischt ihr nicht die Geschäftslogik also die TObjectList mit einer Möglichen Darstellung (VST)?

Programmier doch dein Programm erstmal so, dass es mit der OL läuft.

Die Oberfläche kannst du später anbauen indem du die Ereignisse der OL nutzt.
Die Darstellung/Sortierung in der UI sollte mit dem BI wenig zu tun haben.
Warum sollte die UI einen Schlüssel/Index erzeugen, welcher später in der BI gebraucht wird?

Du kannst auch deine Objekte als Data in den Baum hängen.
Hab ich beim Stammtisch #2 gezeigt:
https://www.delphipraxis.net/712774-post4.html
https://www.delphipraxis.net/104896-...-nachtrag.html
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VirtualTreeView und Sortieren

  Alt 5. Mai 2021, 12:20
Du kannst auch mit Objekten und zwei Listen arbeiten.
Eine Original-Liste 1 und eine weitere Liste 2, die zum Sortieren da ist.
Die weitere Liste 2 hat die selben (!) Items wie die Original-Liste (gleiche Zeiger), wird also initial mit dem Items von der Original-Liste 1 gefüllt.

Sobald du von außen sagst:
Sortiere nach Kriterium so und so, sortierst du auf der weiteren Liste 2 wie du magst und wechselst dann ggf. die RootNodeCount und den die Quelle für OnGetText und die anderen Events.

Ich verstecke das zumeist in einer Klasse, die beide Listen hält und eine Property für die aktuell zu verwendende Liste nach außen hin zum Formular mit der TVirtualTreeView gibt.
Je nachdem gibt der Getter dann die Original-Liste 1 oder weitere Liste 2 zurück.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#6

AW: VirtualTreeView und Sortieren

  Alt 5. Mai 2021, 13:03
Du kannst auch mit Objekten und zwei Listen arbeiten.
Dann solltest Du aber statt mit Objekten mit Interfaces arbeiten ... damit gibt es weniger Speicherprobleme.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#7

AW: VirtualTreeView und Sortieren

  Alt 5. Mai 2021, 13:08
Die zwei Liste braucht nicht Owner zu sein.
So lange nur einer Owner ist, gibt es praktisch auch keine Probleme.

Alternativ kann die zweite Liste aber auch nur die Indize zur ersten Liste zu enthalten, anstatt die Objekte selbst.

Man könnte in die Objekte auch ein zusätzliches Feld aufnehmen und dort nach dem Datenladen den ursprünglichen Index speichern.
Oder man nimmst die zweite Liste nicht für die Sortierung, sondern verwendet weiterhin die erste Liste. In der zweiten Liste kann man die ursprüngliche Sortierung speichern (nach dem Datenladen), entweder die Objektzeiger direkt oder z.B. eine ID aus den Objekten.
Und das nimmt man dann, wenn man die Sortierung zurücksetzen will.

Oder ganz einfach (aber bissl langsamer) ... die Daten einfach neu laden, dann ist die Sortierung auch wieder original.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Mai 2021 um 13:13 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: VirtualTreeView und Sortieren

  Alt 5. Mai 2021, 13:31
Du kannst auch mit Objekten und zwei Listen arbeiten.
Dann solltest Du aber statt mit Objekten mit Interfaces arbeiten ... damit gibt es weniger Speicherprobleme.
Wie Himi sagt:
Eine TObjectList<T>.Create(True) und eine andere TObjectList<T>.Create(False) (oder gleich TList<T>) und schon ist der Lachs gegessen.
Interfaces kann man machen, ist aber nicht notwendig für reine Datenobjekte zur Anzeige in der (Virtual)Treeview.
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#9

AW: VirtualTreeView und Sortieren

  Alt 6. Mai 2021, 11:11
Mal paar andere Gedanken:

Vermischt ihr nicht die Geschäftslogik also die TObjectList mit einer Möglichen Darstellung (VST)?

Programmier doch dein Programm erstmal so, dass es mit der OL läuft.

Die Oberfläche kannst du später anbauen indem du die Ereignisse der OL nutzt.
Die Darstellung/Sortierung in der UI sollte mit dem BI wenig zu tun haben.
Warum sollte die UI einen Schlüssel/Index erzeugen, welcher später in der BI gebraucht wird?

Du kannst auch deine Objekte als Data in den Baum hängen.
Hab ich beim Stammtisch #2 gezeigt:
https://www.delphipraxis.net/712774-post4.html
https://www.delphipraxis.net/104896-...-nachtrag.html
Wo findet man noch das dazugehörige Stammtisch #2 Video?
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#10

AW: VirtualTreeView und Sortieren

  Alt 6. Mai 2021, 14:11
Ich habe dir mal eine Unit angehängt, die noch den direkten Umgang mit einem TVirtualStringTree aus einem sehr alten Projekt von mir zeigt. So was mache ich schon lange nicht mehr, sondern verwende einen Mediator. Behandelt werden die Events: InitNode, FreeNode, GetText, PaintText, BeforeItemErase, CompareNodes, HeaderClick, ContextPopup, Checked. Zu beachten ist, dass es sich um eine alte Version des VirtualStringTrees handeln muss. Die Events könnten heute etwas anders aussehen. Vielleicht hilft es dir.

Bis bald...
Thomas
Angehängte Dateien
Dateityp: zip frm_ViewerPTStatistic.zip (6,1 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:22 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