![]() |
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:
Ich will das ganze jetzt in einer TreeList darstellen. 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... 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:
:?: jetzt meine Frage , ich will das erstellen der Nodes im Vorfeld machen, nicht erst beim Klicken auf die jeweiligen Nodes.
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; Ich denke irgendwie im Kreis :( Hätte jemand vieleicht Lösungsvorschläge für mich ? lg Bundy |
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. |
Re: Listview und seine Child´s
:gruebel: jup da liegt das problem :wall:
|
Re: Listview und seine Child´s
wie kann ich in einer tlist solche Verlinkungen durchführen ?
ich hab mal folgenden code:
Delphi-Quellcode:
Ich bitte euch um ein paar Tips, ich glaub ich steh auf´n Schlauch :gruebel:
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; |
Re: Listview und seine Child´s
^^Schieb :duck:
|
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. |
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 |
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. ... |
Re: Listview und seine Child´s
|
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. |
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