表名为TB,字段如下
编号:code
名称:name
所属:belong
算法核心代码,为增强算法通用性,将窗体的一个treeview和ADOQuery引用到局部变量中,作为对象引用,不创建,也不释放,相当于别名
1procedure Tfrm.FmtTree();
2var
3 i,j :integer;
4 leafList,leafListPlus: TList;
5 leaf,subNode: TTreeNode;
6 tv: TTreeView;//引用窗体控件
7 qry: TADOQuery;//引用窗体控件
8begin
9 //初始化
10 leafList:=TList.Create;
11 leafListPlus:=TList.Create;
12 tv:=tvw1;
13 tv.Items.Clear;
14 qry:=qry1;
15 subNode:=tv.Items.AddChild(nil,'寂寞');
16 leafList.Add(subNode);
17 //处理
18 while leafList.Count > 0 do
19 begin
20 leafListPlus.Clear;
21 for i:=0 to leafList.Count-1 do
22 begin
23 leaf:=leafList;
24 if leaf.Level = 0 then
25 qry.SQL.Text:=Format('select code,name,belong from TB where belong = ''%s''',['--'])
26 else
27 qry.SQL.Text:=Format('select code,Name,belong from TB where belong = ''%d''',[leaf.StateIndex]);
28 qry.Open;
29 for j:= 0 to qry.RecordCount-1 do
30 begin
31 subNode:=tv.Items.AddChild(leaf,qry.FieldByName('name').AsString);
32 subNode.ImageIndex:=subNode.Level;
33 subNode.StateIndex:=StrToInt(qry.FieldByName('code').AsString);
34 leafListPlus.Add(subNode);
35 qry.Next;
36 end;
37 end;
38 leafList.Assign(leafListPlus);
39 end;
40 //清理
41 tv.FullExpand;
42 leafListPlus.Free;
43 leafList.Free;
44end;