最好记录下,每个结点的level和父结点的index(parent.index)
这样可以唯一确定要添加的结点的位置,下面是我刚做的,拿来探讨一下
for i:=1 to aTable.RecordCount-1 do
begin
iLevel:= aTable.FieldByName('Level').Asinteger;
iParent:=aTable.fieldByname('ParentIndex').AsInteger;
strNodename:= aTable.fieldByname('NodeName').AsString; while (iLevel <> oldNode.Level+1) do
begin
if ( iLevel > oldNode.Level) then
oldNode:=oldNode.getFirstChild
else
oldNode:=oldNode.Parent;
end;
if (iParent<>oldNode.Index) then
oldNode:=oldNode.Parent.Item[iParent];
aTree.Items.AddChild(oldNode,aTable.fieldbyName('NodeName').AsString);
aTable.Next;
end;oldNode是要添加的结点的父结点,相应的要有个数据表,其中字段有level,parentindex,nodename
这样可以唯一确定要添加的结点的位置,下面是我刚做的,拿来探讨一下
for i:=1 to aTable.RecordCount-1 do
begin
iLevel:= aTable.FieldByName('Level').Asinteger;
iParent:=aTable.fieldByname('ParentIndex').AsInteger;
strNodename:= aTable.fieldByname('NodeName').AsString; while (iLevel <> oldNode.Level+1) do
begin
if ( iLevel > oldNode.Level) then
oldNode:=oldNode.getFirstChild
else
oldNode:=oldNode.Parent;
end;
if (iParent<>oldNode.Index) then
oldNode:=oldNode.Parent.Item[iParent];
aTree.Items.AddChild(oldNode,aTable.fieldbyName('NodeName').AsString);
aTable.Next;
end;oldNode是要添加的结点的父结点,相应的要有个数据表,其中字段有level,parentindex,nodename
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货