莫言科技

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

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

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

敬请期待

查看: 2508|回复: 0

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

[复制链接]
发表于 2010-8-2 19:51:50 | 显示全部楼层 |
今天比较郁闷的一件事情,就是用treeview动态加载目录,从数据库中将目录读出来。! j; ?% j o3 d
这个应该用动态规划比较简单,但是最近确实是用脑过度了,脑子里全是浆糊,就用下面要讲的死办法了~~==!) p5 m' m/ s& ~6 o3 w  m; l! w
因为数据库设计的时候没有考虑到动态目录树的问题,没有在数据表中比较有前瞻性地设置上级编号、下级编号,只能将不同级别的目录内同一个一个找出来,我的这次,就用到了三张表,采用3重循环将数据添加到treenode中去:
  1. step1:绑定节点数据' n4 x# z- s# s9 n& g
  2. public treenode gettreenode()
    0 e- a, r7 l$ }, o$ ^
  3. {//这个函数还要做优化,因为这样写和数据库的交互会比较多,待有时间了再修改好了
    * i8 s! l' g# o. m/ q2 n
  4.         int i = 0;
    $ e y& g7 q7 [8 w, q/ h
  5.         int n = 0;' _# t3 h$ [' i$ ?/ z: \

  6. : h# v# g4 f. q; q' c1 m  a f
  7.         this.currentuserid = (int)session[sessionstr.currentuserid];
    ' g# _2 d$ l7 r, n4 t8 ~

  8. 2 q" [8 @% x. g6 v( y3 g
  9.         treenode treenode = new treenode();
    & d  z% t) w) [
  10.         datatable dtcourse = coursemanagementbl.getcourseidlistbystudentuserid(this.currentuserid);  c  k, f; r8 c
  11.         foreach (datarow row in dtcourse.rows)! c* f1 a' i7 o& {3 t
  12.         {- t5 d. y  s! f
  13.             treenode.childnodes.add(new treenode(row[1].tostring()));3 k# e; o& q4 k- } g u
  14.             foreach (datarow experiment_row in experimentmanagementbl.getexperimentnamelistbycourseid(int.parse(row["courseid"].tostring())).rows)
    8 x1 }; c( z9 h& t
  15.             {  r/ z: }! \" r& j3 r: j
  16.                 treenode expnode = new treenode();$ n# k! ~$ f) i t5 |' c0 z6 h* m0 _
  17.                 expnode.text = experiment_row[1].tostring();  l( n1 j& h4 v( g' n7 x
  18.                 treenode.childnodes[i].childnodes.add(expnode);/ }4 c2 r) f- n8 z# t: @

  19. ' w3 z" n) n' [7 i
  20.                 //treenode.childnodes[i].childnodes.add(new treenode(experiment_row[1].tostring()));
    8 w0 x) k* ^% v7 a, f
  21.                 foreach (datarow practice_row in practicemanagementbl.getpracticeidlistbyexperimentid(int.parse(experiment_row["experimentid"].tostring())).rows)
    ! m: l& _1 k1 ~3 f; g6 ?
  22.                 {
    2 p' o: n. w9 p, q) v j7 r  s8 e
  23.                     treenode.childnodes[i].childnodes[n].childnodes.add(new treenode(practice_row[1].tostring())); v. t5 m; `1 i o6 q( b$ f; l' j3 t7 `
  24.                 }
    4 l1 l- ]/ x. m* s5 ~ @3 d4 [
  25.                 n ;$ @' l6 e9 |& [6 `7 e: u
  26.             }
    6 |. ^2 h6 l; l
  27.             i ;% a: k$ e1 a3 b' f2 o
  28.             0 h' u! d( y: b% |/ c/ l
  29.         }0 g& p$ t' i" s1 e
  30.         return treenode;9 y; s* k3 g, k* l/ a6 g
  31.     }
    * o2 a* x" m( d/ @
复制代码
step2:将节点内容添加到treeview中
, {9 e4 t' {# u& d5 a也就是在这一步发现了treeview中一个比较奇怪的东西,每将treenode中一个节点add到treeview中时,会自动地将treenode的被添加的这个节点删掉(为什么为什么为什么???),这样就不能用foreach了,因为foreach只能读只读的数据
% x5 l: m8 r; ?* g3 s6 t4 u/ y/ q3 o$ q6 x% k9 q$ k" c) h
那就直接add整个treenode吧(asp.net这个倒是挺自动化的),代码简单:
% g) k2 z5 u, t. _1 gtreenode tn = this.gettreenode();
" g1 k  h- q: g1 k3 b0 t! hthis.tvcoursemenu.nodes.add(tn);
- k3 r- a5 ^( j6 r; v问题也有,我用gettreenode函数返回的是一个treenode,是一个,所以生成的目录最上级是一个空的根目录(我在做数据绑定的时候没有绑定根目录的值啦,当然如果绑定了也可以没有下面的step3了),我想去掉这个,肯定不能remove啦,因为remove根目录,整个的都没啦。
- k0 k% f, @) |step3: i; k7 ?! d) h1 p$ @
用循环绑定根目录的子目录8 s/ x: m  `2 ^0 ~( s
【不能这样】0 _# p0 y( a9 x$ r6 i  s. h
for (int i = 0; i < tn.childnodes.count;)
; r$ ~  ~$ o% c q, x. x. x" j            {8 [. h/ z z" x f* t9 d  x
                this.tvcoursemenu.nodes.add(tn.childnodes);                ; d; x$ a# f3 t; w2 s
            }  q b3 _5 o, d o& r6 r* r& l
【只能这样】, k9 i; k4 p& m# ^9 y9 q7 i
while (tn.childnodes.count != 0)/ a6 ]3 `( _# o
            {
5 k. b/ ~: j0 p& c* j                this.tvcoursemenu.nodes.add(tn.childnodes[0]);
4 j6 w# t8 q( m/ r* n$ z& h            }7 `. d5 i6 z% `5 ?% ]- c
【理由】上面说了已经
; m i7 [( g; m/ v1 q0 i  }& ?- l& h* o1 q
终于弄好了,在做这个遇到step2中的问题的时候去请教了一个实验室的师兄,结果直接说,“我基本不用服务器控件的”,巨囧啊~~看来微软的这种控件还是有一些优化空间的啊,难怪不断地有vs05、08、10

本帖子中包含更多资源

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

x

||archiver|莫言科技 ( )    

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

powered by x3.2

© 2001-2013

返回列表