treeNode.ChildNodes[i].ChildNodes.Add(expNode);& L0 C( j) S+ Y. Y
( ?! h# B9 F' R
//treeNode.ChildNodes[i].ChildNodes.Add(new TreeNode(Experiment_row[1].ToString())); 6 b5 ~" t+ Q/ @ B& H
foreach (DataRow Practice_row in PracticeManagementBL.GetPracticeIDListByExperimentID(int.Parse(Experiment_row["experimentID"].ToString())).Rows)' G l& T" H1 o1 B5 e
{ ! u5 G! M" Q9 y" U& j
treeNode.ChildNodes[i].ChildNodes[n].ChildNodes.Add(new TreeNode(Practice_row[1].ToString()));) u% c2 T! H; C ]. k% `/ m
} 1 I- z% g, M- e9 A
n++;% P- k/ E m2 H* d. T
} / U9 Q) I6 G9 ] a1 t6 y8 x8 r
i++; % ?5 H, {( g5 o$ p1 Q- H) E1 R
7 c0 q1 T4 f$ s5 s
}- I6 y8 G8 J2 m4 w, |
return treeNode;8 T$ c8 B# k: a* V% [
} 6 h7 z" h; u) O# R1 ?) T
复制代码
step2:将节点内容添加到TreeView中3 {" g; u0 N8 H l W0 \* P
也就是在这一步发现了TreeView中一个比较奇怪的东西,每将treeNode中一个节点Add到treeView中时,会自动地将treeNode的被添加的这个节点删掉(为什么为什么为什么???),这样就不能用foreach了,因为foreach只能读只读的数据 # e7 _* r% U. p/ Z4 b[attach]72[/attach]& z* E$ l* c n' K9 {
那就直接Add整个treeNode吧(asp.net这个倒是挺自动化的),代码简单:6 P6 y) k6 O8 J/ b" R
TreeNode tn = this.GetTreeNode(); 8 W/ D Q& r( z) \9 x: B" Q. j4 dthis.tvCourseMenu.Nodes.Add(tn); $ j2 o: i+ A; e
问题也有,我用GetTreeNode函数返回的是一个TreeNode,是一个,所以生成的目录最上级是一个空的根目录(我在做数据绑定的时候没有绑定根目录的值啦,当然如果绑定了也可以没有下面的step3了),我想去掉这个,肯定不能Remove啦,因为Remove根目录,整个的都没啦。 5 D3 G6 h: [* S# K2 r. m. \" Kstep3:( P P/ Y6 e* a
用循环绑定根目录的子目录: n* A1 j) U* j3 b, P3 ]3 g9 H
【不能这样】# x! V! S5 e7 r7 f0 @
for (int i = 0; i < tn.ChildNodes.Count;) 7 ^( I4 {9 f& U, ?" |! z% F) R { % ], l3 ]. ]/ m5 x+ J! A this.tvCourseMenu.Nodes.Add(tn.ChildNodes); # f5 \( w9 o; P% d: B
} 3 ?. X7 i- B: T6 x4 k【只能这样】+ M4 t/ D* m/ z+ ]) y
while (tn.ChildNodes.Count != 0), L8 T* V; \- F- S
{ , c, v7 x* E5 {3 e4 @% [' [/ } this.tvCourseMenu.Nodes.Add(tn.ChildNodes[0]);) }4 ~& k- _$ Q& N* z+ ^9 {
}! R3 z% F% m' A- Q; g
【理由】上面说了已经 - b& t' k0 @$ z8 p/ F/ T- I& y8 e# Y* X
终于弄好了,在做这个遇到step2中的问题的时候去请教了一个实验室的师兄,结果直接说,“我基本不用服务器控件的”,巨囧啊~~看来微软的这种控件还是有一些优化空间的啊,难怪不断地有VS05、08、10