表中记录是这样的:
目录号 目录名 父目录号
0 所有文件 0
1 操作系统 0
2 数据结构 0
3 dos 1
4 windows 1
5 冒泡排序 2
想用treeview生成如下形式:所有文件
操作系统
dos
windows
数据结构
冒泡排序
请问代码应该怎么写,谢谢了先!!!
目录号 目录名 父目录号
0 所有文件 0
1 操作系统 0
2 数据结构 0
3 dos 1
4 windows 1
5 冒泡排序 2
想用treeview生成如下形式:所有文件
操作系统
dos
windows
数据结构
冒泡排序
请问代码应该怎么写,谢谢了先!!!
tmydata=record
id:integer;
name:string;
flag:boolean;
end;procedure TForm1.FormCreate(Sender: TObject);
var
p:pmydata;
node:ttreenode;
begin
new(p);
p^.id:=0;
p^.name:='所有文件';
p^.flag:=false;
node:=treeview1.items.add(nil,p^.name);
node.data:=p;end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
tempnode:ttreenode;
p:pmydata;
begin
if node.data<>nil then
begin
if not pmydata(node.data)^.flag then
begin
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select A.目录号,A.目录名 FROM yourtable as A');
adqquery1.sql.add('where A.父目录号='+quotedstr(pmydata(node.data)^.id);
adoquery1.open;
if adoquery1.recordcount>0 then
begin
adoquery1.first;
while not adoquery1.eof do
begin
new(p);
p^.id:=adoquery1.fieldbyname('目录号').asstring;
p^.name:=adoquery1.fieldbyname('目录名').asstring;
tempnode:=treeview1.items.addchild(node,p^.name);
tempnode.data:=p;
adoquery1.next;
end;
end;
pmydata(node.data)^.flag:=true;
end;
end;
end;
利用treeview的oncustomdrawitem绘列表 ,这样可以更快!
p^.id:=adoquery1.fieldbyname('目录号').asstring;
p^.name:=adoquery1.fieldbyname('目录名').asstring;
p^.flag:=false;//记住把这行也加进去
最后还要记住自己释放掉node.data所保留的指针啊--------------------------------------------------
在什么地方释放,释放的是哪一个啊?
begin
dispose(node.Data);
node.Data:=nil;
end;