我想实现如下的树型菜单:
部门1
员工甲
员工乙
部门2
员工甲
员工乙
部门名由部门信息表中得出,员工名由员工信息表得出,请教该如何实现。
我的代码如下:
procedure tform6.formcreate(sender: tobject);
var
treenode:ttreenode;
str:string;
begin
query1.sql.add('select name from depart');
query1.open ;
while not query1.recordset.eof do
begin
treenode:=treeview1.items.add(nil,query1.fieldbyname('name').asstring);
query2.close;
query2.sql.clear ;
str:=query1.fieldbyname('name').asstring;
query2.sql.add('select name from manstr where depar='''+str+'''');
query2.open ;
while not query2.recordset.eof do
begin
treeview1.items.add(treenode,query2.fieldbyname('name').asstring);
query2.next ;
end;
query1.next ;
end;
end;
上述代码只能显示一个部门信息,循环好象没派上用场,还有显示结果也不对。显示结果是这样:
部门1
员工
员工
请教该如何改一下。
部门1
员工甲
员工乙
部门2
员工甲
员工乙
部门名由部门信息表中得出,员工名由员工信息表得出,请教该如何实现。
我的代码如下:
procedure tform6.formcreate(sender: tobject);
var
treenode:ttreenode;
str:string;
begin
query1.sql.add('select name from depart');
query1.open ;
while not query1.recordset.eof do
begin
treenode:=treeview1.items.add(nil,query1.fieldbyname('name').asstring);
query2.close;
query2.sql.clear ;
str:=query1.fieldbyname('name').asstring;
query2.sql.add('select name from manstr where depar='''+str+'''');
query2.open ;
while not query2.recordset.eof do
begin
treeview1.items.add(treenode,query2.fieldbyname('name').asstring);
query2.next ;
end;
query1.next ;
end;
end;
上述代码只能显示一个部门信息,循环好象没派上用场,还有显示结果也不对。显示结果是这样:
部门1
员工
员工
请教该如何改一下。
解决方案 »
- 对于memo1.Lines.LoadFromFile('E:\work\mail\1.htm');,字符数有限制吗? 在线!! 解决马上结!!!
- DELPHI高手突破 电子书
- 哪里有好的 Delphi数据库开发应用程序源码download ???
- 关于treeview的应用(分不够再给)
- 哪位大侠能否贴一下使用Spcomm串口控件的例程?
- 请问在DELPHI7中怎样使用在DELPHI6中的报表控件!DELPHI7当中可以安装吗?
- 高手进:使用Delphi如何控制Word实现这样的操作-->在文档中编辑内容,保存为图片~~
- 关于网络数据传输,如何使一个线程暂停传输数据?suspend?或者说限速。
- 有一个借口要动态载入动态连接库,是这样写吗?看看谢谢
- 画布问题,高手进来看看……
- 在delphi中如何声明和调用含有传址参数的DLL函数?
- 不知道该用什么标题.大概是连接两个有Handle的组件!
将上面一句改为
treeview1.items.addChild(treenode,query2.fieldbyname('name').asstring);
'select depart.name,manstr.name from depart,manstr where depart.name=manstr.depar group by depart.name'
这样,同时查出部门和员工,建树时现建部门节点,再用部门节点作为父节点建立员工子节点,连续两个记录之间不同的话,再建一个新的部门节点,以此类推。
procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);
//用递归一次性生成所有树节点
var
idTemp:integer;
strSQL:string;
qryTemp:TQuery;
TrNodeTemp:TTreeNode;
begin
TrNodeTemp := mP_TreeNode;
qryTemp := TQuery.Create(self);
try
strSQL := ' select id,name '
+ ' from Tcity '
+ ' where Parentid='+inttostr(mpid);
ExecQry(strSQL,qryTemp,true); //执行SQL
while not qryTemp.Eof do
begin
idTemp := qryTemp.fieldbyname('id').AsInteger;
tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString);
BuildTree(tvDemoTree.Selected,idTemp);
qryTemp.Next;
end;
finally
qryTemp.Free; //释放资源
end;
end;