现在我有一个数据库Test(数据借用)
表结构和数据如入:
ID Name ParentID
1 中国人 00000000
2 浙江人 1
3 湖北人 1
4 杭州人 2
5 绍兴人 2
6 武汉人 3
7 荆门人 3
8 美国人 00000000
9 纽约人 8
10 华盛顿人8
11 曼哈顿人9
---看了些,实现的方法都不理想
表结构和数据如入:
ID Name ParentID
1 中国人 00000000
2 浙江人 1
3 湖北人 1
4 杭州人 2
5 绍兴人 2
6 武汉人 3
7 荆门人 3
8 美国人 00000000
9 纽约人 8
10 华盛顿人8
11 曼哈顿人9
---看了些,实现的方法都不理想
FieldCode,FieldName,fieldLevel:String);
var
NodTop,Nodselect: Ttreenode;
MyTree : PDrawTree;
QryTmp:Tadoquery;
begin
QryTmp:=Tadoquery.Create(Nil);
QryTmp.Connection:=QryDest.Connection;
QryTmp.sql.text:=QryDest.Sql.text;
Try
QryTmp.open; TreDest.Items.Clear;
New(Mytree);
Mytree.Code:='';
Mytree.Name:='全部';
TreDest.Items.AddChildObject(nil,Mytree.Name,Tobject(Mytree));
NodTop:=TreDest.TopItem;
NodTop.ImageIndex:=0;
NodTop.SelectedIndex:=0;
QryDest.Filtered:=False;
QryDest.Filter:=fieldLevel+'=1';
QryDest.Filtered:=True;
QryDest.First;
while not QryDest.eof do
begin
New(Mytree);
Mytree.Code:=QryDest.fieldbyname(FieldCode).asstring;
MyTree.Name:=QryDest.fieldbyname(FieldName).asstring;
Nodselect:=TreDest.Items.AddChildObject(NodTop,'【'+Mytree.Code+'】'
+MyTree.Name,Tobject(Mytree));
DrawTreeAll(TreDest,QryTmp,FieldCode,FieldName,
fieldLevel,Nodselect);
If Nodselect.HasChildren Then
Begin
Nodselect.ImageIndex:=0;
Nodselect.SelectedIndex:=2;
End
else
Begin
Nodselect.ImageIndex:=1;
Nodselect.SelectedIndex:=3;
end;
QryDest.Next;
End
finally
QryTmp.Free;
end;
If QryDest.Filtered Then
QryDest.Filtered:=False;
// treDest.FullExpand;
end;
Procedure DrawTreeAll(TreDest : TtreeView;QryDest:TAdoquery;
FieldCode,FieldName,fieldLevel:String;parNode:TtreeNode);Var
MyTree:PDrawTree;
Node : TtreeNode;
i:Integer;
Begin
QryDest.Filtered:=False;
QryDest.Filter:=FieldCode+' like '''+PDrawTree(ParNode.Data)^.Code+'*'+''' and '
+fieldLevel+'='+Inttostr(parNode.level+1);
QryDest.Filtered:=True;
QryDest.first;
While Not QryDest.Eof Do
Begin
New(MyTree);
MyTree.code:=QryDest.fieldbyname(FieldCode).asstring;
MyTree.name:=QryDest.fieldbyname(FieldName).asstring;
Node:=TreDest.Items.AddChildObject(ParNode,'【'+MyTree.Code+'】'
+MyTree.Name,Tobject(MyTree));
QryDest.Next;
end;
For i:=0 To ParNode.Count-1 Do
Begin
DrawTreeAll(TreDest,QryDest,
FieldCode,FieldName,fieldLevel,ParNode.Item[i]);
If ParNode.Item[i].HasChildren Then
Begin
ParNode.Item[i].ImageIndex:=0;
ParNode.Item[i].SelectedIndex:=2;
end
else
Begin
ParNode.Item[i].ImageIndex:=1;
ParNode.Item[i].SelectedIndex:=3;
end;
end;
end;
[tym_code] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[tym_name] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[tym_re] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[tym_level] [int] NOT NULL ,
[tym_bottom] [bit] NULL
) ON [PRIMARY]调用 QryType.Connection:=QryTmp.Connection;
QryType.close;
QryType.Sql.text:='Select * from '+TypeTable ;
QryType.open;
DrawTreetop(Ttreeview,QryType,FieldCode,FieldName,FieldLevel);