莫言科技

全过程、自定制,轻松实现跨 旅游集散中心自助游

票务与调度系统(独立版) 整合旅游集散中心资源,提供 自助半自助游自定义套餐

面向有志创业的人士、基于云 计算理念提供的创业产品

敬请期待

查看: 2507|回复: 0

动态加载treeview目录树之纠结篇-凯发k8官网下载客户端

[复制链接]
发表于 2010-8-2 19:51:50 | 显示全部楼层 |
今天比较郁闷的一件事情,就是用treeview动态加载目录,从数据库中将目录读出来。: ]# h  ]6 a; }4 b  p
这个应该用动态规划比较简单,但是最近确实是用脑过度了,脑子里全是浆糊,就用下面要讲的死办法了~~==!9 _" m m, v$ i6 v; a' h. }
因为数据库设计的时候没有考虑到动态目录树的问题,没有在数据表中比较有前瞻性地设置上级编号、下级编号,只能将不同级别的目录内同一个一个找出来,我的这次,就用到了三张表,采用3重循环将数据添加到treenode中去:
  1. step1:绑定节点数据2 w }3 p4 ]5 z' d( k' i
  2. public treenode gettreenode()( b# u1 v. m2 h  i! y( ]
  3. {//这个函数还要做优化,因为这样写和数据库的交互会比较多,待有时间了再修改好了* |$ }- g$ e" `4 @% z" f) w
  4.         int i = 0;
    . q) p; u8 q1 r# _) c7 o
  5.         int n = 0;4 o1 g" v y' ^* f' e
  6. 2 e, j* s6 m) a/ i/ c- f
  7.         this.currentuserid = (int)session[sessionstr.currentuserid];5 `; q/ ?1 w2 p% {- k3 `4 s. w
  8. ! x8 r1 l& a# [* f  v- [6 |
  9.         treenode treenode = new treenode();) o7 i! u  e# ]
  10.         datatable dtcourse = coursemanagementbl.getcourseidlistbystudentuserid(this.currentuserid);! w6 {# d3 d1 q# v5 g5 x9 s
  11.         foreach (datarow row in dtcourse.rows)
    8 z& d& o$ k0 h/ y
  12.         {1 g8 k* l b/ f, k
  13.             treenode.childnodes.add(new treenode(row[1].tostring()));/ o7 q7 o u% j8 ]
  14.             foreach (datarow experiment_row in experimentmanagementbl.getexperimentnamelistbycourseid(int.parse(row["courseid"].tostring())).rows)
    6 q# @! u) @) ]5 d
  15.             {8 q6 y) v: }* a% r% v
  16.                 treenode expnode = new treenode();
    ; h( o4 @1 d! f! f4 y8 x( f
  17.                 expnode.text = experiment_row[1].tostring();/ x1 r3 c# a" f4 r1 n5 n
  18.                 treenode.childnodes[i].childnodes.add(expnode);
    % o$ r* s5 r% c
  19. 6 s" r1 h) o l8 x
  20.                 //treenode.childnodes[i].childnodes.add(new treenode(experiment_row[1].tostring()));% u- r, w- i; l7 f0 k) g, r/ x
  21.                 foreach (datarow practice_row in practicemanagementbl.getpracticeidlistbyexperimentid(int.parse(experiment_row["experimentid"].tostring())).rows)7 g9 j, r# j: v, f) e4 i5 z
  22.                 {
    1 l( `5 v' e) x) p
  23.                     treenode.childnodes[i].childnodes[n].childnodes.add(new treenode(practice_row[1].tostring()));
    9 ?: b' r$ c- s$ l1 t" s; x9 x
  24.                 }$ g6 ]9 x% c" l% d7 w
  25.                 n ;
    : ]3 x# a4 p7 z( \8 g; v0 x- c7 \
  26.             }
    ( a  x) f6 l" y6 w1 c: r# j
  27.             i ;& `* `1 w9 s7 f/ u0 v" `
  28.             * o: k9 n/ f; b" o  x( ~, b/ c7 w
  29.         }
    9 o) e$ }1 y7 {" b
  30.         return treenode;
    ' s; p, x8 v: ?3 u0 x: v- a
  31.     }
    5 a, \2 [" k" r  d5 s. @5 m. n
复制代码
step2:将节点内容添加到treeview中
/ h7 c1 b; v- h6 g/ c2 y3 f也就是在这一步发现了treeview中一个比较奇怪的东西,每将treenode中一个节点add到treeview中时,会自动地将treenode的被添加的这个节点删掉(为什么为什么为什么???),这样就不能用foreach了,因为foreach只能读只读的数据6 \9 k) c( e7 v/ |0 b$ b$ ?

# f2 o7 {' n, l3 m, k# z% f那就直接add整个treenode吧(asp.net这个倒是挺自动化的),代码简单:
4 `0 l. t. r3 s: i  b. k* ptreenode tn = this.gettreenode();4 c1 g: p$ }, h/ i
this.tvcoursemenu.nodes.add(tn);
- y, `3 @6 @' g* s8 ?- u问题也有,我用gettreenode函数返回的是一个treenode,是一个,所以生成的目录最上级是一个空的根目录(我在做数据绑定的时候没有绑定根目录的值啦,当然如果绑定了也可以没有下面的step3了),我想去掉这个,肯定不能remove啦,因为remove根目录,整个的都没啦。
4 o# d8 y: w( ystep3:0 j6 z. |/ q, \0 e1 k) p9 f
用循环绑定根目录的子目录
1 n0 f: e  e4 g9 {【不能这样】
3 u' p7 h3 n- d0 i: ifor (int i = 0; i < tn.childnodes.count;)9 y7 y$ [4 s7 s9 h m
            {# \1 x/ t9 [7 w1 [7 y ?
                this.tvcoursemenu.nodes.add(tn.childnodes);               
& f9 u! y4 d5 y            }
" z; x" o3 q$ \5 w( t/ m【只能这样】* x6 w$ v- p! y, ?0 ]
while (tn.childnodes.count != 0)
4 l  e7 w8 b3 i            {
. {2 }7 ?5 r* z                this.tvcoursemenu.nodes.add(tn.childnodes[0]);
) i9 u7 k. \: [) x# k! d            }
a# \& x0 n1 g% m0 e3 ~ d【理由】上面说了已经) b4 n q& w3 \& f

0 z/ w# ]/ c ]" n8 r终于弄好了,在做这个遇到step2中的问题的时候去请教了一个实验室的师兄,结果直接说,“我基本不用服务器控件的”,巨囧啊~~看来微软的这种控件还是有一些优化空间的啊,难怪不断地有vs05、08、10

本帖子中包含更多资源

您需要 才可以下载或查看,没有帐号?

x

||archiver|莫言科技 ( )    

gmt 8, 2021-3-17 07:32 , processed in 0.084964 second(s), 10 queries , wincache on.

powered by x3.2

© 2001-2013

返回列表