type
{------------TreeView 的数据记录-------------}
PDataRec = ^DataRec;
DataRec = Record
name : string;
ID : integer;
parent : integer;
end;{--------------------------------生成树----------------------------------------}
procedure TForm1.DisTree(FId: integer; FNode: TTreeNode);
var
i : integer;
TNode : TTreeNode;
q : TQuery;
PData : PDataRec;
begin
q:=TQuery.Create(self);
q.DatabaseName:=database1.DatabaseName;
with q do
begin
close;
sql.Clear;
sql.Add(format('select * from tree where parent=%d',[FId]));
open;
first;
while not Eof do
begin
new(PData);
with PData^ do
begin
name:=FieldByName('name').asstring;
ID :=FieldByName('ID').asinteger;
Parent:=FieldByName('Parent').asinteger;
end;
TNode:=TreeView1.Items.AddChildObject(FNode,PData^.Name,PData);
TNode.ImageIndex:=0;
TNode.SelectedIndex:=1;
DisTree(fieldbyname('id').asinteger,TNode);
next;
end;
end;
end;//然后在
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TempNode : TTreeNode;
begin
TempNode:=TreeView1.GetNodeAt(x,y);
TempNode.Selected:=true;
end;
end;//我的意思是,你在生成树的时候把信息写进去了,然后读出来就可以了,就是这个思路
{------------TreeView 的数据记录-------------}
PDataRec = ^DataRec;
DataRec = Record
name : string;
ID : integer;
parent : integer;
end;{--------------------------------生成树----------------------------------------}
procedure TForm1.DisTree(FId: integer; FNode: TTreeNode);
var
i : integer;
TNode : TTreeNode;
q : TQuery;
PData : PDataRec;
begin
q:=TQuery.Create(self);
q.DatabaseName:=database1.DatabaseName;
with q do
begin
close;
sql.Clear;
sql.Add(format('select * from tree where parent=%d',[FId]));
open;
first;
while not Eof do
begin
new(PData);
with PData^ do
begin
name:=FieldByName('name').asstring;
ID :=FieldByName('ID').asinteger;
Parent:=FieldByName('Parent').asinteger;
end;
TNode:=TreeView1.Items.AddChildObject(FNode,PData^.Name,PData);
TNode.ImageIndex:=0;
TNode.SelectedIndex:=1;
DisTree(fieldbyname('id').asinteger,TNode);
next;
end;
end;
end;//然后在
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TempNode : TTreeNode;
begin
TempNode:=TreeView1.GetNodeAt(x,y);
TempNode.Selected:=true;
end;
end;//我的意思是,你在生成树的时候把信息写进去了,然后读出来就可以了,就是这个思路
我也是这样实现的
不过有一点差别
1、首先使用递归sql语句将所有记录查出
查找
在表staff中有两个字段
area_id,up_area
up_area为area_id的上级字段
数据表中记录入下
area_id up_area
zq
aq zq
bq zq
cq aq
dq bq
eq cq在查找上级为zq的所有子级的sql语句如下
SELECT AREA_ID FROM AREA
START WITH
AREA.AREA_ID='ZQ'
CONNECT BY PRIOR AREA.AREA_ID=AREA.UP_AREA
2、使用一个递归构造TreeView
2.在TreeView1Expanding事件中,根据所选取得node判断是否有children,如果就动态添加好了。(注:这种方法的效率较高,尤其在树结构较为复杂的情形)。