我本无名
菩提本无树,明镜亦非台。本来无一物,何处惹尘埃。
      不知道单位为什么一直在用vs2003而不用vs2005,自己本来就是一个菜得不能再菜的菜鸟了。做了好几年的web开发。到现在很多东西还是第一次使用。所以感觉自己浪费了太多时间。唉。。。。。。。。
      说了一些费话啊。在vs2003里,treeview是没有被集成的,你得去下一个。这个就不多说了。现在说一下如何在它的上面加上复选框。在vs2005里面,属性里有一个属性可以直接选择,可是在vs2003里却不行。它有一个属性是node.CheckBox=true/false。默认情况是false所以 你要在生成节点的时候在下面加上它才行。
                TreeNode node = new TreeNode();
                node.CheckBox = true;
这样你就会发现所有的节点的前面出现一个复选框了。
      展开时不提交,改变选择节点时才提交。这个功能其实是就是让你写一段javascript代码。让它来完成autopostback的功能。好了说一下它的实现。
      一,autopostback的属性值设置成false
      二,<body onload="initTree()">这里加上onload="initTree()"
      三,在后台Page_Load中写入如下代码:
string  strTreeName  =  "TreeView1";
string  strRef  =  Page.GetPostBackEventReference(TreeView1);
string  strScript  =  "<script  language=\"JavaScript\">  \n"  +  "<!--  \n"  +  "            function  initTree()  {  \n"  +"                        "  +  strTreeName  +  ".onSelectedIndexChange  =  function()  {  \n"  +    "if  (event.oldTreeNodeIndex  !=   event.newTreeNodeIndex)  \n"  +  "this.queueEvent('onselectedindexchange',  event.oldTreeNodeIndex  +  ','  +  event.newTreeNodeIndex);  \n"  +    "window.setTimeout('"  +  strRef.Replace("'","\\'")    +  "',  0,  'JavaScript');  \n"  +    "                        }  \n"  +      "            }  \n"  +    "//  -->  \n"  +  "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript  ); 
这里大家要注意,strTreeName变量里的值是你的treeview的名字。
变量strScript变量里的内容千万不要折行,不然的话,会提示说你有错误。
试一下,是不是在点开结点的时候。不会再有闪烁的感觉了。这里还有一个问题,当你点选其中一个节点时,你会发现多出一个根节点,而且展开后,里面是所有的节点,你点几个就会出现几个。这是为什么呢。
呵呵。。。。因为在上面说的第三步中的代码,是不能放到!Page.IsPostBack里的,否则会提示出错。但是我们在在处理树节点显示的问题时,又必须放在!Page.IsPostBack里,否则一旦出现刷新,就会发生上面的问题,会重复出现多个树。这个时候,我们只要把上面第三步的代码,放到!Page.IsPostBack的外面。而别的代码依然放在!Page.IsPostBack的里面。这样就可以了。
试一下,还是比较好用的吧。不过我想很少有人会用了。因为大家都在用vs2005吗。呵呵。。。。。。。。。

posted on 2007-11-29 14:26  我本无名  阅读(415)  评论(1编辑  收藏  举报