我的数据库结构是这样:
AutoId CName FatherId
13 总公司 0
14 行政部 13
16 财务部 13
18 供应部 13
20 分公司 0
21 行政部 20
22 财务部 20要用treeview显示为这种效果: ___总公司
|___行政部
|___财务部
|___供应部
___分公司
|___行政部
|___财务部用递归的代码如下,但这种方法速度太慢了,100多条记录需要5秒钟。如果逐级创建treeview该怎么写?我是新手,最好能帖上代码,谢谢……procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
QryTmp.SQL.Add('select * from tb1');
QryTmp.SQL.Add('where FatherId='+inttostr(AId));
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString); //创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
myNode.Data:=myLabel; AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
AutoId CName FatherId
13 总公司 0
14 行政部 13
16 财务部 13
18 供应部 13
20 分公司 0
21 行政部 20
22 财务部 20要用treeview显示为这种效果: ___总公司
|___行政部
|___财务部
|___供应部
___分公司
|___行政部
|___财务部用递归的代码如下,但这种方法速度太慢了,100多条记录需要5秒钟。如果逐级创建treeview该怎么写?我是新手,最好能帖上代码,谢谢……procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
QryTmp.SQL.Add('select * from tb1');
QryTmp.SQL.Add('where FatherId='+inttostr(AId));
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString); //创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
myNode.Data:=myLabel; AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
解决方案 »
- 菜鸟求助[Fatal Error] Unit1.pas(6): File not found: 'MessageBox.dcu'的问题!
- 用QReport打印Png格式的透明图片,背景变为黑色,请问怎样解决,急急急,谢谢!!
- 使用WebBrowser组件穿过代理服务器的疑问
- ComboBox上下左右光标键的自定义如何实现
- 推荐:www.coderpub.com 欢迎大家访问
- 一个奇怪的问题:TStringList <> nil ,但访问TStringList.Text出现地址错误
- 如何去掉字符串前后的空格,如何获取左子串或右子串
- 访问网站上的access数据库
- 50分求Lotus ScreenCam软件
- ePing:不好意思,分数给错了
- 我想在报表中横向输出两条数据库的记录如何做???
- 如何在一个TDBChart中显示多个Series?并且可以手工隐藏特定的Series,显示特定的Series?急!!!
---------------------------------------
你工作生活的好助手
个人数字助理 V1.1
天空软件园下载地址
http://www.skycn.net/soft/21193.html
华军软件园下载地址
http://www.onlinedown.net/soft/35617.htm
能给一个逐级创建treeview的节点例子吗?
在线等,多谢……
代码如下:procedure TForm1.Button1Click(Sender: TObject);
var stAutoid,stCname,stCname2,stGroupid:string;
tnode:TTreeNode;
begin
with d1 do
begin CommandText:='select autoid,cname,fatherid from bb where fatherid=0';
Active:=True; end;
d1.Recordset.MoveFirst;
while not d1.eof do
begin
stGroupid:=d1.FieldValues['fatherid'];
stAutoid:=d1.FieldValues['autoid'];
stCname:=d1.FieldValues['cname'];
tnode:=TreeView1.Items.AddFirst(nil,stCname);
d1.MoveBy(1);
with d2 do
begin CommandText:='select cname from bb where fatherid='''+stAutoid+'''';
Active:=True;
end;
d2.Recordset.MoveFirst;
while not d2.eof do
begin
stCname2:= d2.FieldValues['cname'];
TreeView1.Items.AddChild(tnode,stCname2);
d2.MoveBy(1);
end;
d2.Active:=false;
end;
end;其中:
d1: TADODataSet; d2: TADODataSet;