Delphi-PRAXiS

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/)
-   -   Ersatzteilliste - Selektierung über TreeView (https://www.delphipraxis.net/175802-ersatzteilliste-selektierung-ueber-treeview.html)

Metschu 20. Jul 2013 14:53

Ersatzteilliste - Selektierung über TreeView
 
Hallo zusammen,

ich möchte gerne eine Ersatzteilliste erstellen.
Die Ersatzteile werden in einem Listview angezeigt. Über den Treeview werden die Teile dann gefiltert.

Ist nichts angeklickt, sollen alle Teile in der Liste erscheinen. Je weiter man sich in die Zweige rein klickt, um so spezifischer sollen die Teile in der Liste werden
Beispiel:
-> Zweig "Elektrik" alle Elektrik Teile
-> Unterzweig "Kabel" nur noch alle Kabel
-> Unterzweig "rot" nur noch alle roten Kabel
Bis jetzt hab ich es hinbekommen, das die richtigen Teile im letzten Zweig angezeigt werden - vorher ist die Liste leer.

Dem letzten Zweig hab ich einen eindeutigen Pointer zugewiesen, der auch der Teilegruppe in der Liste zugewiesen ist - so mache ich derzeit die Selektion zur Anzeige im Listview.

Könnt ihr mich mal auf den Richtigen weg schubse, wie ich das auch in den darüber liegenden Zweigen rausfiltern kann?
Steh im Moment etwas auf dem Schlauch


Danke schonmal.

Gruß

Torsten

Christian Seehase 20. Jul 2013 15:16

AW: Ersatzteilliste - Selektierung über TreeView
 
Moin Torsten,

wie sind die Daten denn gespeichert?
In einer Datenbank?

Metschu 20. Jul 2013 16:19

AW: Ersatzteilliste - Selektierung über TreeView
 
Hallo Christian,

sie sollen in einem TRecord gespeichert werden.

Union 20. Jul 2013 17:27

AW: Ersatzteilliste - Selektierung über TreeView
 
Und der Record wird dann verworfen? Wie ist die Pesistenz? Aber zunächst mal kannst Du ein Parent in jedem Record mitführen. Und dann suchst Du zu jeder Ebene rekursiv alle Unterebenen.

jobo 20. Jul 2013 20:20

AW: Ersatzteilliste - Selektierung über TreeView
 
Du hast nicht geschrieben, was für Ersatzteile, aber ich könnte mir vorstellen, dass die Liste ziemlich lang sein kann. Darstellung von vollständigen, langen Listen ist ressourcenintensiv und relativ nutzlos.

Um Dich etwas zu schubsen:
Vergiss den Treeview als statisches Filterwerkzeug. Die Kategorien und Unterkategorien, die einen konkreten Treeview ergeben, sehen morgen vielleicht ganz anders aus. Es gibt sicher dutzende Produktmerkmale, aus denen man viele verschiedene Filterbäume aufbauen kann.

Bau dir ein System, dass Teile nach Kategorie (Unterkategorie) filtern kann.
Bau Dir eine Kategorie Visualisierung, die möglichst flexibel ist.
Ein Klick auf Deine Kategorievisualisierung wird dann immer die gewünschten IDs zur Filterung deiner Teileliste liefern. Das nutzt Du dann als Filter für die Teileliste.

sx2008 20. Jul 2013 22:46

AW: Ersatzteilliste - Selektierung über TreeView
 
Zitat:

Zitat von jobo (Beitrag 1222158)
Vergiss den Treeview als statisches Filterwerkzeug. Die Kategorien und Unterkategorien, die einen konkreten Treeview ergeben, sehen morgen vielleicht ganz anders aus

Das würde ich auch so sehen.
Man kann einen Treeview benutzen um in eine Teilehierarchie einzutauchen aber der Zweig "rot" gibt keinen Sinn.
Wie tief man den Suchbaum sinnvollerweise machen kann siehst du z.B. auf Elektronikseiten.
Beispiel:
Code:
Bauteile -> Optoelektronik -> Lasertechnik -> Lasermodule

Furtbichler 21. Jul 2013 07:24

AW: Ersatzteilliste - Selektierung über TreeView
 
Zitat:

Zitat von sx2008 (Beitrag 1222162)
Zitat:

Zitat von jobo (Beitrag 1222158)
Vergiss den Treeview als statisches Filterwerkzeug.

Das würde ich auch so sehen.

Ich nicht. Es ist ein statisches Filterwerkzeug, das -richtig verwendet- auf sehr einfache Art und Weise die Visualisierung einer hierarchische Strukturierung von Daten und deren Selektierung erlaubt. Man darf sie nur nicht sofort komplett füllen (sondern erst im OnExpand) und es ist nur dann performant, wenn im zu füllenden Teilbaum (nach dem Aufklappen) nicht hunderte von Unterknoten entstehen. Natürlich kann man auch das bekannte Virtual Treeview (VTV) nehmen, aber lazy load bietet sich eigentlich immer an.

Bei der Wahl des Selektionsparadigmas sollte man sich die Frage stellen: "Wie wird gesucht?"
Kennt man die Bezeichnung, dann reicht ein Eingabefeld, eine unscharfe Textsuche, fertig.
Geht man jedoch wirklich hierarchisch vor, benötigt also zunächst alle Kabel, dann ist so ein Treeview mit Multiselekt in der Artikelebene und Drag&Drop auf die ausgewählten Artikel schon sinnvoll.

Es spricht auch nichts dagegen, mehrere Paradigmen umzusetzen.

Eine Treeview zu filtern passt allerdings nicht zum lazy-load, weil man entweder durch das Filtern der Daten das lazy load aushebelt (weil alles angezeigt wird) oder unvollständig filtert (wegen lazy load).

Wenn Du das mit einer TV umsetzen willst, würde ich zunächst die Daten filtern, hierarchisch sortieren und aus der gefilterten Liste das TV komplett aufbauen. Wenn Du -wie schon erwähnt- zu viele Artikel hast, wird das aber grottenlangsam, weswegen dann hier ein VTV vorzuziehen ist.

Das VTV gibt es hier.

Metschu 21. Jul 2013 16:37

AW: Ersatzteilliste - Selektierung über TreeView
 
Hallo zusammen,

erstmal danke für Eure Antworten.

Zitat:

Zitat von jobo (Beitrag 1222158)
Du hast nicht geschrieben, was für Ersatzteile, aber ich könnte mir vorstellen, dass die Liste ziemlich lang sein kann. Darstellung von vollständigen, langen Listen ist ressourcenintensiv und relativ nutzlos.

Das ganze ist für eine LKW-Werkstatt. Die Teile werden im Normalfall über ein Teileprogramm rausgesucht.

Viele Kleinteile (vor allem für aufwändige Um- oder Nachrüstungen) sind nicht in dem System da von Zulieferern oder nur umständlich zu ermitteln und stehen derzeit in einer Papierliste - die Teilnummer müssen händisch in das System eingetippt werden.
So könnte man die "Einkaufsliste" durch klicken zusammenstellen und an das System übertragen.
Die Liste hat derzeit ca. 1.500 Teile. Hier steht die Teilnummer, die Benennung und noch 2 weitere Definitionen (Wert / Farbe / etc). Alles mit jeweils 25 Zeichen (also 100 Zeichen Je Teil)
Bilder, Beschreibungen und Ähnliches kommt nicht mehr dazu.

Zitat:

Zitat von sx2008 (Beitrag 1222162)
Man kann einen Treeview benutzen um in eine Teilehierarchie einzutauchen aber der Zweig "rot" gibt keinen Sinn.

War auch nur ein Beispiel, man kann auch die Kabelstärke nehmen.
Das ganze (Der Suchbaum) sollte Sinniger weise vom User bzw Admin einstellbar sein und nicht Statisch von der Software vorgegben. Das macht die Sache nicht gerade einfacher...
Der TV ist auch nur Suchbaum zur Selektierung. Die eigentlichen Teile werden in einem Listview aufgelistet.

Zitat:

Zitat von Furtbichler (Beitrag 1222175)
Wenn Du das mit einer TV umsetzen willst, würde ich zunächst die Daten filtern, hierarchisch sortieren und aus der gefilterten Liste das TV komplett aufbauen.

Auch eine Idee, das TV so rum zu erstellen.

Den VTV muss ich mir dann doch nochmal genauer anschauen.

sx2008 21. Jul 2013 17:56

AW: Ersatzteilliste - Selektierung über TreeView
 
Zitat:

Zitat von Metschu (Beitrag 1222197)
Zitat:

Zitat von sx2008 (Beitrag 1222162)
Man kann einen Treeview benutzen um in eine Teilehierarchie einzutauchen aber der Zweig "rot" gibt keinen Sinn.

War auch nur ein Beispiel, man kann auch die Kabelstärke nehmen.

Genau das ist doch der Punkt.
Du hast mehrere Kabelstärken (0.5, 1, 2, 4, 10mm^2) sowie mehrere Farben (rot, grün, blau, schwarz).
Was ist jetzt wichtiger: die Kabelstärke oder die Farbe?
Tja, es kommt drauf an.
Für den einen ist die Kabelstärke wichtiger; für den anderen die Farbe.
Würde man den Baum weiterführen, gäbe es 5 Knoten für die Kabelstärke und darunter jeweils 4 Knoten für die Farbe (5 * 4 = 20 Unterknoten).
Man könnte auch mit der Farbe beginnen (4 Knoten) und darunter die Kabelstärke (5 Knoten) und käme wiederum auf 20 Unterknoten.
Wenn man beides haben will; also sowohl über Farbe als auch Kabelstärke sich den Baum hinunterbewegen möchte braucht man 40 Unterknoten.
Problem: alle Kabel sind dann auf 2 Wegen auffindbar und damit auch doppelt im Baum enthalten.
Würde man ein weiteres Attribut hinzufügen (z.B. Hersteller) dann multipliziert sich das Ganze mit der Anzahl der Hersteller.
Daher muss der Baum dort enden, wo Attribute (Farbe, Kabelstärke, Hersteller, Länge, ...) ins Spiel kommen.

Union 21. Jul 2013 18:31

AW: Ersatzteilliste - Selektierung über TreeView
 
Vielleicht wäre eher ein filter- und gruppierbares Grid interessant, in dem man die Dtenmenge immer weiter einschränken kann.

Sigi Sandl 21. Jul 2013 18:43

AW: Ersatzteilliste - Selektierung über TreeView
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, Metchu,

ich arbeite bei einem Automobilzulieferer und habe vor etlichen Jahren damit begonnen, in Delphi eine TeileDB zu implementieren. Ziel war es, baugruppenorientierte Stücklisten zu erzeugen.
Meine Datenstruktur stellt sich wir folgt dar: Projekt - Baugruppe/Lieferumfang - Unterbaugruppen. Zwischen Projekt und Baugruppe kann ich beliebige Unterverzeichnisse einfügen.
Die Verzweigungstiefe innerhalb einer Baugruppe ist ebenfalls beliebig.
Einzelteile verwalte ich in einer TList, ebenso Projekte und Baugruppen.
Baugruppen und Einzelteile beschreibe ich in einem entsprechenden Dialog. Die Datenstruktur entsteht in einer Treeview.
Projekte und Baugruppen werden dem entsprechenden Treeview.Node.Data zugewiesen, Einzelteile werden innerhalb der Baugruppe einer TList-Struktur zugewiesen.
In der StringGrid daneben wird mir der Inhalt des angewählten Node.Data angezeigt.
Alle Daten speichere ich in einer Ini-ähnlichen Textdatei.
Die Methoden, die ich verwende, sind rustikal, um nicht zu sagen brachial, aber die Performance ist so gut, daß ich keinen Grund habe, dies zu ändern.

Ich will Dir hier keine fertige Lösung präsentieren, sondern Dir nur sagen, daß klappt schon mit einer Treeview, wenn auch mit viel Geduld und Spucke.

Grüße
Sigi Sandl

musicman56 21. Jul 2013 18:51

AW: Ersatzteilliste - Selektierung über TreeView
 
Hallo,

was haltet ihr davon: Ich würde erst mal eine Datenbank die SQL verarbeiten kann verwenden, um die Teile zu speichern. Dann in einer Text-Datei (.INI) den Aufbau des Suchbaumes mit den dazugehörigen SQL-Statements definieren. So ist das System sehr flexibel und ohne jegliche Programmänderung anpassbar, performant und zudem auch relativ schnell und einfach zu realisieren. Und zur Anzeige ein Treview und ein DBGrid auf die Form, das wars.

Metschu 21. Jul 2013 20:35

AW: Ersatzteilliste - Selektierung über TreeView
 
Zitat:

Zitat von musicman56 (Beitrag 1222202)
Hallo,

was haltet ihr davon: Ich würde erst mal eine Datenbank die SQL verarbeiten kann verwenden, um die Teile zu speichern

Das scheitert leider daran, XE2 Starter keine Datenbanken mag und ich auf dem System wo es laufen soll, keine installieren kann :(

Zitat:

Zitat von Sigi Sandl (Beitrag 1222201)
Ich will Dir hier keine fertige Lösung präsentieren, sondern Dir nur sagen, daß klappt schon mit einer Treeview, wenn auch mit viel Geduld und Spucke.

Ich möchte auch keine fertige Lösung, denn sonst weis ich nicht wie es Funktioniert und wenn mal was nicht klappt, brauche ich mich wenigstens nur über mich ärgern ;)

Aber so ähnlich wie in Deinem Screenshoot sieht es auch bei mir aus :)

Zitat:

Zitat von sx2008 (Beitrag 1222198)
Du hast mehrere Kabelstärken (0.5, 1, 2, 4, 10mm^2) sowie mehrere Farben (rot, grün, blau, schwarz).
Was ist jetzt wichtiger: die Kabelstärke oder die Farbe?
Tja, es kommt drauf an.

Über den TV wird "Grob" vorausgewählt -> Alle 1. Ader einzelnen Kabel mit 1,5 mm², alle Sicherungen mit Form A, alle 24 V Glühlampen, etc
Die "Feinheiten" der Selektion (Kabelfarbe, Stärke der Sicherung, Wattzahl der Glühlampe) soll über das ListView erfolgen. Hier stehen dann pro Endgruppe je nach Typ maximal 10 Positionen drinne (Benennung, Freier Wert 1 (z.B. Wattzahl), Freier Wert 2, Teilenummer)

Evt ist es aber doch sinnvoll, die Anzeige der Teile im Listview bei nicht vollständig gewähltem Knoten wegzulassen...

musicman56 22. Jul 2013 08:36

AW: Ersatzteilliste - Selektierung über TreeView
 
Zitat:

Das scheitert leider daran, XE2 Starter keine Datenbanken mag und ich auf dem System wo es laufen soll, keine installieren kann
Ist es ein Mehrplatzsystem? Wenn ja, handelst du dir einen Sack Probleme ein, wenn nein, dann nimm eine integrierete Datenbank. Beispielsweise Nexus (www.nexusdb.com), die ist als integrierte Version sogar kostenlos. Weil embedded, also vollständig in die exe gelinkt, muss auch nichts installiert werden.

An der Verwendung einer Datenbank scheitert es also nicht, denn die Starter-Edition hat ein TDatasource für den Zugriff auf die BDE mit dabei, und mehr brauchst du auch nicht für Nexus. Außerdem, falls es jetzt ein Einplatz-System ist, und später mal ein Arbeitsplatz dazu kommen sollte, dann ist das in weniger als einer Stunde fix und fertig.

Metschu 28. Jul 2013 12:52

AW: Ersatzteilliste - Selektierung über TreeView
 
Also das ganze soll eine Mehrplatzversion werden.

Die EXE kommt auf ein Netzlaufwerk, wo alle drauf zugreifen.

In einem anderem Project hab ich das mit Records gelöst, klappt auch super, nur mit wesentlich weniger Daten...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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