Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Listview und seine Child´s (https://www.delphipraxis.net/105026-listview-und-seine-child%B4s.html)

bundy 14. Dez 2007 11:28


Listview und seine Child´s
 
Hallo liebe DP !

Ich programmiere gerade eine Auktionshaus Software.
Ich verfüge über einen Table (MySql) - Categorien, der do aufgebaut ist:

Code:

cat_id   parent_id  cat_name .........Rest unwichtig
  1          0        Auto & Motorrad         ......
  2          0        Briefmarken & Münzen    ......
.
.
.
  25         2       Briefmarken Deutschland  ......
  26         2       Briefmarken Europa       ......
.
.
.
  30        25       Deutschland bis 1944      ......
usw...
Ich will das ganze jetzt in einer TreeList darstellen.
Die Nodes mit ihren Subnodes.

Aber wie kann ich das coden wenn ich nicht weiss, wie viele Subnodes jede Kategorie hat ?
Im OnClick Ereigniss bekomme ich das hin, weil ich ja abfragen kann welcher Node gerade focusiert ist.
Da mach ich das so:
Delphi-Quellcode:
procedure TForm2.cxTreeList1DblClick(Sender: TObject);
var
i:integer;
  ANode:TcxTreeListNode;

begin
indexnode:= cxTreeList1.FocusedNode;
mySQLQuery1.SQL.Text:='select * from categories where parent_ID = '+QuotedStr(cxTreeList1.Columns[0].Value);
mySQLQuery1.Active:=True;
mySQLQuery1.First;
for i := 0 to mySQLQuery1.RecordCount-1  do
    begin
      ANode := cxTreeList1.AddChild(indexnode);
     ANode.Values[0] := mySQLQuery1.FieldByName('cat_id').AsString;
     ANode.Values[1] := mySQLQuery1.FieldByName('parent_id').AsString;
     ANode.Values[2] := mySQLQuery1.FieldByName('cat_name').AsString;
     ANode.MakeVisible;
     ANode.Focused := True;

    mySQLQuery1.Next;
    end;

end;
:?: jetzt meine Frage , ich will das erstellen der Nodes im Vorfeld machen, nicht erst beim Klicken auf die jeweiligen Nodes.
Ich denke irgendwie im Kreis :(
Hätte jemand vieleicht Lösungsvorschläge für mich ?

lg
Bundy

Nuclear-Ping 14. Dez 2007 11:48

Re: Listview und seine Child´s
 
Der Baum ist ja in der Tabelle virtuell schon abgebildet, anhand von cat_id und parent_id. parent_id ist praktisch ein Unterknoten von cat_id.

Du musst halt die Tabelle auslesen, in einem Array oder einer TList ablegen und deinen Baum per parent_id und cat_id nachbilden und organisieren.

bundy 14. Dez 2007 11:58

Re: Listview und seine Child´s
 
:gruebel: jup da liegt das problem :wall:

bundy 14. Dez 2007 16:03

Re: Listview und seine Child´s
 
wie kann ich in einer tlist solche Verlinkungen durchführen ?

ich hab mal folgenden code:

Delphi-Quellcode:
  type
  PMyList = ^AList;
  AList = record
    cat_id: Integer;
    parent_id: Integer;
    cat_name:string;
  end;
procedure TForm2.cxButton1Click(Sender: TObject);
var
i:integer;
MyList: TList;
ARecord: PMyList;
begin
 MyList := TList.Create;
 mySQLQuery1.SQL.Text:='select * from categories where parent_ID = 0';
 mySQLQuery1.Active:=True;
 mySQLQuery1.First;
 for i := 0 to mySQLQuery1.RecordCount-1  do
    begin
         New(ARecord);
         ARecord^.cat_id := mySQLQuery1.FieldByName('cat_id').AsInteger;
         ARecord^.parent_id := mySQLQuery1.FieldByName('parent_id').AsInteger;
         ARecord^.cat_name := mySQLQuery1.FieldByName('cat_name').AsString;
         MyList.Add(ARecord);
         mySQLQuery1.Next;
    end;

end;
Ich bitte euch um ein paar Tips, ich glaub ich steh auf´n Schlauch :gruebel:

bundy 16. Dez 2007 17:08

Re: Listview und seine Child´s
 
^^Schieb :duck:

Nuclear-Ping 17. Dez 2007 23:26

Re: Listview und seine Child´s
 
Was erwartest du denn? :mrgreen:

Den halben Lösungsansatz hast du doch schon. Du musst nur cat_id mit verbauen und parent_id orientiert sich daran.

bundy 18. Dez 2007 13:02

Re: Listview und seine Child´s
 
Das Problem ist nur das jede Unterkategorie beliebig viele Unterkatagorien haben kann.
Das bedeutete manche haben:

Hauptkategorie - Unterkategorie - Unterkategorie- Unterkategorie

und andere

Hauptkategorie - Unterkategorie -Unterkategorie

Wie mach ich das mit den verschiedenen Ebenen (Tiefen) der Kategorien.

lg
Bundy

Nuclear-Ping 18. Dez 2007 20:55

Re: Listview und seine Child´s
 
Per Rekursion.

Eine Möglichkeit:
Du fängst bei parent_id = 0 an, da hast du alle Stammknoten.

Dann gehst du von oben den Baum rekursiv durch und schaust, ob es in der Tabelle (oder Liste) Einträge gibt, wo parent_id = cat_id ist und da hast du dann den Knoten, wo du deinen (ersten) Unterknoten dranhängen kannst.

Dann gehst du 'ne Ebene tiefer und wiederholst das. Usw. ...

omata 18. Dez 2007 21:03

Re: Listview und seine Child´s
 
Hallo bundy,

siehe auch hier und hier.

Gruss
Thorsten

bundy 19. Dez 2007 12:13

Re: Listview und seine Child´s
 
danke für die Links & Info´s :thumb:
, werde mir mal den Code durch meinen Gehirncompiler :pale: jagen.
Melde mich bei Rückfragen.

danke Nuclear-Ping & Omata

lg
bundy


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz