倒哪表名为:_treeTable
结构:
create table _treeTable(
[id] [int] IDENTITY(1,1) NOT NULL,
[NodeName] [varchar](50) NOT NULL,
[ParentID] [int] NOT NULL
)
ParentID为父节点的ID
第一级的节点的ParentID为-1,如下:
全部产品是默认提前添加好的.
加载树并显示的代码如下(方便快捷):
//假如使用的dateset为adoquery名称为:qry1;数据库配置省略
//树使用系统自带的组件:TTreeNode,Name为Tv1
procedure ShowTree;
var
strSql : string;
FirstNode : TTreeNode;
begin
strSql := 'select * from _TreeNode order by id, ParentID';
qry1.text := strSql;
qry1.Open;
if qry1.RecordCount > 0 then
begin
//获取默认的第一个节点(全部产品),所有的节点在它下面建
FirstNode := Tv1.Items[0];
Tv1.Items.BeginUpdate;
AddNode(FirstNode);
Tv1.Items.EndUpdate;
end;
end;
procedure AddNode(_FirstNode : TTreeNode);
var
ID, ParentID : integer;
NodeName : string;
TempNode : TTreeNode;
_list : TStringList;
ItemIndex : integer;
begin
qry1.First;
_list := TStringList.create;
with qry1 do
begin
while not Eof do
begin
ID:= FieldByName('id').AsInteger;
NodeName := FieldByName('NodeName').AsString;
ParentID := FieldByName('ParentID').AsInteger;
if ParentID = -1 then
begin
TempNode := Tv1.Items.AddChild(_FirstNode, NodeName);
end
else
begin
ItemIndex := _list.IndexOf(ParentID.tostring());
if ItemIndex <> -1 then
begin
TempNode := TTreeNode(_list.Objects[ItemIndex ]);
TempNode := Tv1.Items.AddChild(TempNode, NodeName);
end;
end;
_list.AddObject(ID.tostring(), TempNode );
Next;
end;
end;
_list.free;
end;
希望能帮到大家!