- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~
+ T8 H/ _7 n: E9 \0 Nprocedure Trs.TreeView1Click(Sender: TObject);" v. g5 m1 D9 D! j
var node: TTreeNode;& B" X, E) N0 z% ?8 a
strnode:string;- o& |3 `* D" E9 E' q# S6 Z! L
label ok;
' d' a; @; v) E, H3 h, R5 K2 l* t- V! J& S label haschild;. U8 H+ B/ t) K$ }4 @' p. D
label nextnode;
7 n8 W3 k7 R! d% |begin
& y5 C0 d: w b5 a {. Y& ^! C" m node:=treeview1.TopItem;
+ Q2 H0 u: I! Ghaschild: node:=getfirstchild(node);) R+ w0 P$ t+ H* T8 B
strnode:=node.Text;$ c+ j8 _; I1 M+ R& \2 `, j
dm.qtree.Close;
( V9 g# n% u' E2 Z8 b) E dm.qtree.SQL.Clear;
" U9 i) ~2 c) J1 r" v- w7 p" }5 n dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';6 N* f7 I2 H, S4 X; ?( h9 A4 B" M
dm.qtree.Open; //取得该部门下所有员工姓名
) E& Q0 \3 q. V' T4 m& D if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工); g4 @; D- w J
begin //将所有员工姓名都作为子节点添加
g$ J9 }. s& E9 `7 [ repeat: ^* y" P7 O J* x- c7 D# W
strnode:=dm.qtree.fieldbyname('empname').AsString;; w( I: C: s% p7 ^
treeview1.Items.AddChild(node,strnode);
3 ^: g; p, ?2 {4 t2 \. ^ dm.qtree.Next; I# w2 Q. m! _# r# S
until dm.qtree.Eof;$ g$ l6 |- J( s5 }
end;
' [$ }. k9 B3 q A) K5 s if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个. O7 J# k" {9 w+ o Y- ?3 p
begin
. {+ O; t6 \0 S; I+ Jnextnode: node:=node.getNextSibling; //取得下一个同级节点
) C& A5 F5 u& P/ x! ~$ w+ b+ ~. m goto haschild;
# x: K" V' J) |6 ?/ i! J7 y! O3 i end
% X- F6 T! h8 Q! [; `0 e9 ^" q else- E& D3 v% a. }8 B2 S. i
begin$ s" G" P3 S" u4 k
if node.Index =treeview1.Items.Count then goto ok
. Y& p8 H0 N$ o/ Z- U% D6 [( r else goto nextnode;4 B$ A4 U) K! c
end;7 f- v( o+ V2 X7 l+ J+ V9 C1 o
ok:null;# ]+ _+ V; B3 d8 P+ `* g% ?
end; |
zan
|