- 在线时间
- 0 小时
- 最后登录
- 2005-2-2
- 注册时间
- 2004-5-13
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 64 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 20
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   15.79% 该用户从未签到
 |
我想实现这样的功能,遍历tree中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~7 N' r( k5 V& ^0 j5 D
procedure Trs.TreeView1Click(Sender: TObject);( [* x8 N& R, t7 g2 G
var node: TTreeNode;8 b9 L4 e, q# D/ P& S }
strnode:string;
3 z) S0 I5 E: l2 ^) i9 n$ V label ok;2 O3 \* q/ h6 r: T z. ?
label haschild;
! w% T& r: I) O4 b& |# Q label nextnode;
( H c( B/ R* W$ d: Zbegin
4 p' o2 Q1 s3 L node:=treeview1.TopItem;
" i# H8 p, ]! S$ u u3 ~haschild: node:=getfirstchild(node);1 [ `, O/ M( `. P4 z* e
strnode:=node.Text;& A0 o+ e3 S$ W; @( L
dm.qtree.Close;5 n4 g5 d [7 z- R* @
dm.qtree.SQL.Clear;
5 z q1 ^7 m* L& X- [ dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';
9 N* v4 w& e7 v: x; Z; ? dm.qtree.Open; //取得该部门下所有员工姓名
2 O- q1 v1 p5 t `0 T) z if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)
, r; ^2 p$ t: w( M8 h e+ m begin //将所有员工姓名都作为子节点添加
# U d5 t' u3 O8 D% r) {! ? repeat
; O9 \% b: h% w+ a/ ` strnode:=dm.qtree.fieldbyname('empname').AsString;
$ n! n4 f3 t: Y$ N treeview1.Items.AddChild(node,strnode);
/ G/ W9 H2 v' R0 y dm.qtree.Next;& J1 h0 l0 {6 Y$ u4 N$ |
until dm.qtree.Eof;
8 C' M5 W) g7 X) N1 I C2 T- J p end;
% O6 B0 k1 [ C& ` if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个9 ^3 x: g; }1 G6 ]0 \. z( K0 B
begin
* b& l$ F% f9 p0 X' wnextnode: node:=node.getNextSibling; //取得下一个同级节点- z& j' B' }: @- s, P
goto haschild;5 R# ~" Y( L% K" D
end
: _- d: n) T4 r. c3 i( e else! Q4 |/ H `. \$ t* ?% C
begin
. P& t# Z$ j2 w7 B" m" F+ Y( ] if node.Index =treeview1.Items.Count then goto ok- h% Q U# e+ g2 r
else goto nextnode;; z v4 A7 T! N, j$ M; ^8 H* e7 u
end;
5 j0 I' M- a* Z! p8 ]# tok:null;' ?# A. N8 k# q6 J/ ^( x- T. N
end; |
zan
|