- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~2 _: S7 L0 `' N2 t
procedure Trs.TreeView1Click(Sender: TObject);3 p' I H2 k! v r& M, v: `
var node: TTreeNode;% @4 f- ~) t' n7 |1 @
strnode:string;
' w' v; l9 e% Y' W' u label ok;6 y3 m$ l7 ~- e5 v
label haschild;. y1 ^& c! n0 V D7 ~+ L8 E" F
label nextnode;
6 h1 q$ P9 V/ {) s2 Vbegin
0 r# Z& g& h: O% y5 w% x4 _ node:=treeview1.TopItem;* g( Y3 h6 E l1 B% M; V* j, E ^
haschild: node:=getfirstchild(node);* z# M) I- K5 a& g% Y) C. K
strnode:=node.Text;6 p( H+ A0 \, P0 y( ?
dm.qtree.Close;
, I. ]7 l3 X' p4 X3 M dm.qtree.SQL.Clear;2 g! Y' C% q9 F% |/ o8 G
dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';5 d: \, M- ~1 X6 r
dm.qtree.Open; //取得该部门下所有员工姓名$ }/ v+ Y; c2 m' ?3 ~5 s7 w# ^2 n
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)6 c) ^2 I( I+ F: N5 d
begin //将所有员工姓名都作为子节点添加* O" U+ j* M: ]- \. T5 y
repeat
" x% K8 ?9 g E; @. I( K strnode:=dm.qtree.fieldbyname('empname').AsString;; c5 m) s- \: o( M5 n0 b0 k
treeview1.Items.AddChild(node,strnode);
7 E' A8 K) G# w: b9 Y9 v& c0 o dm.qtree.Next;
: _" X4 d" a* G: { until dm.qtree.Eof;
1 ]9 H4 p& G) X, `* x end;
4 f" b6 R* o! t9 c2 O if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个) [2 A9 |$ U/ Y$ e# g( k
begin
+ R2 b! S( I' l: `( o" f4 hnextnode: node:=node.getNextSibling; //取得下一个同级节点
+ z; n% x% I3 Z2 s+ D; D* c X3 G goto haschild;7 D8 E( X0 t8 Z# a
end
) A1 U. C5 R; G4 Z! e else
9 { Q' O* k2 R3 @1 ?4 A2 r) B4 Z5 y begin7 h8 ]; N7 o' j' w
if node.Index =treeview1.Items.Count then goto ok
8 p1 b) l, m) S0 H b6 l else goto nextnode;
; E/ o. [2 G4 [- B end;
7 G+ S! n5 E2 p8 nok:null;7 }. e8 C8 J6 U
end; |
zan
|