- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~3 W" H$ Y6 D; v: D6 d2 o
procedure Trs.TreeView1Click(Sender: TObject);
4 H; s J( k8 pvar node: TTreeNode;' E6 E3 e1 X9 g( a" o5 `
strnode:string;1 o/ Y4 g/ x T- b0 _: o( L
label ok;
1 R( R9 l" E( z7 P+ ~ label haschild;
; v; Y1 \7 w3 W/ r( f label nextnode;! D( v! } l6 K+ i5 H% n8 \
begin
+ ~$ h6 H/ @- z node:=treeview1.TopItem;' a+ K' T' f! L
haschild: node:=getfirstchild(node);
8 t8 p. i# I- U) w' U strnode:=node.Text;3 B8 P0 @8 S T4 r- f/ C' v M" K
dm.qtree.Close;
7 i( u( y% F o9 b& ~( m, ^& w4 @8 Z dm.qtree.SQL.Clear;
, A0 X+ k7 l8 _! ?, T dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';
' ^0 B9 h* h) n9 ?5 b( a) E dm.qtree.Open; //取得该部门下所有员工姓名) D2 w/ g, }8 B. j% t
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)
, u, g* F( C# T. p7 j- i begin //将所有员工姓名都作为子节点添加
. t" B1 Z# m8 `# r4 Z! x repeat0 h& y* Q) B1 |
strnode:=dm.qtree.fieldbyname('empname').AsString;
0 Q7 E. J- T4 Y" e7 | treeview1.Items.AddChild(node,strnode);
1 N) E0 q9 l2 y5 O dm.qtree.Next;4 w' I3 \: ]/ N2 t7 [$ B/ L B
until dm.qtree.Eof;
+ u1 H* v- G; }+ ]+ m0 Z) I end;" Q; J$ o# J: M7 k! X9 U2 i
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个
: e& _! w4 n2 U8 `& W& n- B: t begin" }3 M4 `; d; G1 A
nextnode: node:=node.getNextSibling; //取得下一个同级节点, n+ l& X6 q- g3 X: T: M9 _0 P9 ]
goto haschild;- k* `, G; b3 L) N; w+ G
end
$ l9 [. V3 x4 `) J n# U2 b. C else1 x5 K# H- g4 s9 A8 L6 _3 x( |7 C6 j
begin
. {( L1 W+ b2 [- v+ N if node.Index =treeview1.Items.Count then goto ok
# y, n5 o( n# s) B$ M else goto nextnode;: F7 n% x1 d5 d+ I' J
end;
% e% U- f1 T" K. s, |2 aok:null;
F; m. e0 L. g$ uend; |
zan
|