var rootnode,ChildNode:TTreeNode; i:integer; begin if Query1.Active then query1.close; Query1.sql.clear; Query1.sql.add(....)//取出主表的name Query1.open; for i:= 0 to Query1.Recordcount - 1 do begin RoodbNode := Treeview.items.add(nil,query1['name']) RoodNode.imageIndex := 1; RootNode.selectIndex ;= 1; If Query2.Active then Query2.close; Query2.sql.clear; Query2.sql.add(...)//取出所有的和主表name对应的记录 Query2.open; for j :=0 to Query2.RecordCount - 1 do begin ChildNode := Treeview.Item.add(RootNode,query2['??']); ChildNode.ImageIndex :=2; ChildNode.SelectIndex :=2; end; end; Query1.close; Query2.close; end; 随便写了一下,差不多是这个搞法而已
rootnode,ChildNode:TTreeNode;
i:integer;
begin
if Query1.Active then query1.close;
Query1.sql.clear;
Query1.sql.add(....)//取出主表的name
Query1.open;
for i:= 0 to Query1.Recordcount - 1 do
begin
RoodbNode := Treeview.items.add(nil,query1['name'])
RoodNode.imageIndex := 1;
RootNode.selectIndex ;= 1;
If Query2.Active then Query2.close;
Query2.sql.clear;
Query2.sql.add(...)//取出所有的和主表name对应的记录
Query2.open;
for j :=0 to Query2.RecordCount - 1 do
begin
ChildNode := Treeview.Item.add(RootNode,query2['??']);
ChildNode.ImageIndex :=2;
ChildNode.SelectIndex :=2;
end;
end;
Query1.close;
Query2.close;
end;
随便写了一下,差不多是这个搞法而已
如果有一个节点,用户从来不用的话?那么这个数据取下来不是浪费资源了吗?
我建议:动态的创建节点
1.取得主表的节点,把主表的节点放到Tree上,在主表节点下创建一个临时节点Temp
2.在Tree的Expand事件中:判断该节点的第一个子节点是否为Temp,如果是,则删除Temp并把相关从表的数据读出加载到当前节点上.
3.在第2步中可以使用BeginUpDate和EndUpDate,这边能避免屏幕闪动.