//treeNode.ChildNodes[i].ChildNodes.Add(new TreeNode(Experiment_row[1].ToString()));& B$ |- Q5 X4 Y/ V ~8 k3 L
foreach (DataRow Practice_row in PracticeManagementBL.GetPracticeIDListByExperimentID(int.Parse(Experiment_row["experimentID"].ToString())).Rows) 7 G7 V% E# c O9 S$ v
{ . l$ g& L, I. a/ @
treeNode.ChildNodes[i].ChildNodes[n].ChildNodes.Add(new TreeNode(Practice_row[1].ToString()));8 K2 n1 ?+ j! X7 y n2 I6 Z3 h
} , Y% \' d& t1 M' ` u% e, {* b
n++;" K. J4 Z& v) r! [: L0 \9 w
}: B; s; f3 t* N8 W$ ~
i++; * E. f/ i2 [1 |
! r$ w7 [& h% L. h g( v! g6 k2 {; P
} 2 {- k, Q# z5 T; C8 i
return treeNode; + k# S* Q: h, \: [7 R. F3 H# U
} 7 O* e; S P' o5 h8 q* L
复制代码
step2:将节点内容添加到TreeView中1 P4 X' v# Y" w
也就是在这一步发现了TreeView中一个比较奇怪的东西,每将treeNode中一个节点Add到treeView中时,会自动地将treeNode的被添加的这个节点删掉(为什么为什么为什么???),这样就不能用foreach了,因为foreach只能读只读的数据 4 H0 V2 s& q& q0 u2 Q[attach]72[/attach]& ]2 q' `: U( M
那就直接Add整个treeNode吧(asp.net这个倒是挺自动化的),代码简单: : }8 b- @7 G0 u6 r7 RTreeNode tn = this.GetTreeNode();- S% W1 \0 h' E4 P6 Q. w
this.tvCourseMenu.Nodes.Add(tn); 5 I7 ?3 S" R) P. o1 R
问题也有,我用GetTreeNode函数返回的是一个TreeNode,是一个,所以生成的目录最上级是一个空的根目录(我在做数据绑定的时候没有绑定根目录的值啦,当然如果绑定了也可以没有下面的step3了),我想去掉这个,肯定不能Remove啦,因为Remove根目录,整个的都没啦。- g: s, |# O2 s' l' i. N
step3: 2 n* g9 c6 _+ `8 `用循环绑定根目录的子目录4 @5 b2 l; m) i1 G6 V7 R5 p
【不能这样】 ( m) Z7 `& T; I% \for (int i = 0; i < tn.ChildNodes.Count;) `- o7 { X+ n, R { 6 o f4 H- p; q6 x R$ J1 ? this.tvCourseMenu.Nodes.Add(tn.ChildNodes); 4 B- m& b2 i' y& Y0 G: K% F, F
} 0 Z- D6 O0 J* }3 T/ D/ y4 Y【只能这样】 $ ^: d+ \/ }7 gwhile (tn.ChildNodes.Count != 0) 2 y5 U! R2 F! k0 j! L {! }& T* v6 M7 r8 l
this.tvCourseMenu.Nodes.Add(tn.ChildNodes[0]);# ?$ w- Z, J. u P
}3 K2 |, M2 u' T: Y, o) p0 w! @
【理由】上面说了已经 5 z: a0 }6 b3 R6 N) s ; v$ s- g ?+ z8 r+ i9 ~终于弄好了,在做这个遇到step2中的问题的时候去请教了一个实验室的师兄,结果直接说,“我基本不用服务器控件的”,巨囧啊~~看来微软的这种控件还是有一些优化空间的啊,难怪不断地有VS05、08、10