Ähem...
Die Daten sind nich wech... surprise, surprise
Das Einzige was ich tun muss ist eigentlich das eine relevate Datenfeld,
nämlich meine ParentID, beim verschieben zu beackern. Um den Rest kümmert Move() sich selbst.
Danach muss ich nur noch die State Images updaten - et voilá, c'est ca..
Tja... Kaum macht man(n) es richtig schon klappt das...hab ich mal irgendwo gelesen..
Das ganze Problem ist der Parentkey in meinen Daten. Der muss korretk sein.
Der Tree organisiert sich selbst wenn drin rumwerkelt aber das kann Ich nicht alles übernehmen.
Es darf nicht vorkommen das meine Keys durcheinanderfliegen.
So klappt das jedenfalls :
Delphi-Quellcode:
procedure TObjSearchtree.SaveChildren( ANode : TTreeNode );
var
LChild : TTreeNode;
pParent : TTreeNode;
pKey : String;
begin
// Save the possible parents ID
pKey := '0';
pParent := ANode.Parent;
if pParent <> NIL then
begin
pKey:= PNodeRec(pParent.Data)^.FPKey;
end;
while ANode.HasChildren do
begin
LChild := ANode.getFirstChild;
PNodeRec(LChild.Data)^.FMother := pKey;
LChild.MoveTo( ANode, naInsert );
end;
ANode.Delete;
end;
Zur Datenstruktur..
Es gibt einen Record den Ich halt per Pointer dran klemme. Janz einfach.
Ich brauche die Daten für den Shop und weil es viele, viele verschiedene Suchbäume geben kann
die geladen und gespeichert werden können müssen die eben, mit allen Daten dran, in der
DB abgelegt werden.
Schaut so aus:
Delphi-Quellcode:
AddObject(nil, pName, RecPtr).StateIndex := cFlatUnChecked; // root
AddObject(aNode, pName, RecPtr).StateIndex := cFlatUnChecked; // child
Und dann klemmt das dran..
Delphi-Quellcode:
// Dataset for Searchtree entries
type
// Pointer to recordset
PNodeRec = ^TNodeRec;
TNodeRec = record
// SAGE specific
FMandant : integer;
FHauptartikelgruppe : string;
FArtikelgruppe : string;
FVaterartikelgruppe : string;
// Common
FTreeNode : TTreeNode;
FName : string;
FTreeNo : string;
FPKey : string;
FMother : string;
FSortOrder : integer;
FLevel : integer;
FImage : string;
FCustGroups : string;
FTimestamp : integer;
FChecked : integer;
FCategoriesTemplate : string; // def = categorie_listing.html
FListing_template : string; // def = product_listing_v1.html
FProductsSorting : string; // def = p.products_price
FProductsSorting2 : string; // def = ASC
FCategories_icon : string; // def = blank.png (transparent image)
FCategoriesIcon_w : integer; // def = size of blank image
FCategoriesIcon_h : integer; // def = size of blank image
end;
// array of Treenodes for sorting purpose
TDyamicNodeArray = array of TNodeRec;