- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~- s; ]* J" R7 H( N5 ^/ T! y
procedure Trs.TreeView1Click(Sender: TObject);
) O3 n1 Z+ Z! O0 L! V' I" vvar node: TTreeNode;/ T/ a8 Z& R; C2 U3 X) O: T+ _6 j' o
strnode:string;
5 |3 v9 {, z: l( `; t label ok;
/ y0 `/ }0 C% M+ y3 B0 @8 E label haschild;0 `! t) g, S, J; ~" Z0 w- X
label nextnode;9 C1 p4 m- v' i* ]2 B
begin. ?9 }7 k. J* L. n! ~- m% `0 y4 `
node:=treeview1.TopItem;
\' N: F, P+ ]; w& R& P$ r7 H+ {haschild: node:=getfirstchild(node);
7 `2 w* \ v+ \ strnode:=node.Text;
4 R. V8 U' B. Z2 I( C dm.qtree.Close;- S( M" Y6 f% O
dm.qtree.SQL.Clear;# N# ?4 q& {( x8 _
dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';6 D3 }; h: e% o. G! f6 a
dm.qtree.Open; //取得该部门下所有员工姓名3 G6 ^/ }3 j" H- q# Q( `/ V
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)
- W+ s& D( X/ p8 e. t# V7 L begin //将所有员工姓名都作为子节点添加
k( C$ ]2 o3 X. K% |7 k( L6 s* z repeat7 S7 ?# p, P; B+ |& E
strnode:=dm.qtree.fieldbyname('empname').AsString;
' S E1 C! N! r0 _1 J! S treeview1.Items.AddChild(node,strnode);
# L; K p/ ]- j+ B* C8 C dm.qtree.Next;
* S' k0 f$ q) P$ _4 A1 c until dm.qtree.Eof;; l0 j. d Q [, L- f# G
end;
$ p6 N8 a! W- D+ M( D5 P( W if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个2 i; E: v- m# _( I; }7 d- Q
begin7 ]$ M- g9 U& h: o3 }
nextnode: node:=node.getNextSibling; //取得下一个同级节点5 z. X9 n2 r. x
goto haschild;
. ^; _6 K1 P0 i M* ~8 Q end" L3 e2 ~, a0 p% {
else
3 ?$ E* K5 g# N4 {. R; J/ A begin
. `3 m2 M4 a# z0 e if node.Index =treeview1.Items.Count then goto ok% @8 k7 W- J! x# j v) U$ E2 K
else goto nextnode;& C! N, I5 S; l* f
end;
, D. z& n+ C1 ?- zok:null;" ? z6 h) c2 X! ?1 Y
end; |
zan
|