asp.net 2.0 中的TreeView树形控件,如何用JAVASCRIPT控制节点?
他没HTC,不知如何用,还请高手指导想实现当点父节点时CHECKBOX时,子结点所有的结点也和一致的功能

解决方案 »

  1.   

    呵呵,难怪你在帮我顶,原来,你也碰到这个问题了。我已经问过很多人了,好像都没有好的解决方法。因为现在的treeview使用的是一个table了。每一个node都是一个td。我只能做到下面这一步,就做不下去了。增加/删除/遍历什么的都不行。已经给几个MVP发了mail,寻求解决办法了。获取点击的Node的Text代码如下: 
    //tvLibrary是VS2005自带的TreeView控件。 
    var txt = str_CT100 + "tvLibrary_SelectedNode"; //注意加了后缀 
    var LibraryTree = document.getElementById(txt); 
    var LibraryTreeNodeID = LibraryTree.value; 
    var LibraryTreeNode = document.getElementById(LibraryTreeNodeID); 
    var LibraryTreeNodeText = LibraryTreeNode.innerHTML; //Text如果还不行,就决定使用梅花雨的树形控件了,但不知道能不能满足我动态操作node的需求。
    一起关注。
      

  2.   

    对了兄弟,那个AutoPostBack属性去哪了呀?
      

  3.   

    过度使用javascript写整个应用程序的话,那么你的程序肯定不能适应asp.net的进化。
      

  4.   

    遍历页面所有checkbox,不可以?
      

  5.   

    下面的操作完全是在客户端的:JavaScript对TreeView的操作     <script language="javascript">       <!--       //初始化选中节点       function initchecknode()       {              var node=TreeView1.getTreeNode("1");              node.setAttribute("Checked","true");              setcheck(node,"true");               FindCheckedFromNode(TreeView1);       }                     //oncheck事件       function tree_oncheck(tree)       {              var node=TreeView1.getTreeNode(TreeView1.clickedNodeIndex);              var Pchecked=TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("checked");              setcheck(node,Pchecked);       }        //选择具有焦点的结点       TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text")              //设置子节点选中       function setcheck(node,Pc)       {              var i;              var ChildNode=new Array();              ChildNode=node.getChildren();                             if(parseInt(ChildNode.length)==0)              {                     return;              }              else              {                     for(i=0;i<ChildNode.length;i++)                     {                            var cNode;                            cNode=ChildNode[i];                            if(parseInt(cNode.getChildren().length)!=0)                            {                                   setcheck(cNode,Pc);                            }                            cNode.setAttribute("Checked",Pc);                     }              }       }                      //取得一个结点下所有选中结点的值       function GetCheck(node)       {              var i;              var ChildNode=new Array();              ChildNode=node.getChildren();              if(ChildNode) //如存在子结点              {                     for(i=0;i<ChildNode.length;i++)                     {                            cNode=ChildNode[i];                            if(cNode.getAttribute("Checked"))                            {                                   if(Form1.NodeState.value =="")                                   {                                          Form1.NodeState.value = cNode.getAttribute("NodeData");                                          Form1.NodeState_text.value= cNode.getAttribute("Text");                                   }                                   else                                   {                                          Form1.NodeState.value = Form1.NodeState.value +"," + cNode.getAttribute("NodeData");                                          Form1.NodeState_text.value = Form1.NodeState_text.value + "," + cNode.getAttribute("Text");                                   }                                                               }                            if(cNode.getChildren())                            {                                   GetCheck(cNode);                            }                     }                     }              else              {                     return;              }       }         //如一个结点被选中,则其所有子结点选中       function SetCheck(node,Pc)       {              var i;              var ChildNode=new Array();              ChildNode=node.getChildren();              if(ChildNode) //如存在子结点              {                     for(i=0;i<ChildNode.length;i++)                     {                            cNode=ChildNode[i];                            cNode.setAttribute("Checked",Pc);                            if(cNode.getChildren())                            {                                   SetCheck(cNode,Pc);                            }                     }                            }              else              {                     return;              }       }               //如一个结点被选中,则其所有子结点选中(全选)       function SetCheck(node,Pc)       {              var i;              var ChildNode=new Array();              ChildNode=node.getChildren();              if(ChildNode) //如存在子结点              {                     for(i=0;i<ChildNode.length;i++)                     {                            cNode=ChildNode[i];                            cNode.setAttribute("Checked",Pc);                            if(cNode.getChildren())                            {                                   SetCheck(cNode,Pc);                            }                     }                            }              else              {                     return;              }       }                     //如一个结点下的所有结点均未选中,则其父结点处于未选中状态        function UnCheck(node,Pc)       {              if(Pc==false)              {                     if(node.getParent())                      {                             cNode=node.getParent();                             cNode.setAttribute("Checked",false);                            SetUnCheck(cNode,Pc);                     }               }              else              {                     return;              }       }                     function SetUnCheck(node,Pc)       {              var i;              var theNode;              var ChildNode=new Array();              ChildNode=node.getChildren();                             if(parseInt(ChildNode.length)!=0)              {                     for(i=0;i<ChildNode.length;i++)                     {                            var cNode;                            cNode=ChildNode[i];                            if(cNode.getAttribute("Checked")==true)                            {                                   theNode=cNode.getParent();                                   theNode.setAttribute("Checked",true);                            }                            if(parseInt(cNode.getChildren().length)!=0)                            {                                   SetUnCheck(cNode,Pc);                            }                     }              }              else              {                     return;              }       }                     //如一个结点被选中,则其所有父结点均处于选中状态       function SetParentCheck(node,Pchecked)       {              var cNode;              if(Pchecked==true)              {                     if(node.getParent())                     {                            cNode=node.getParent();                            cNode.setAttribute("Checked",true);                            SetParentCheck(cNode,Pchecked);                     }              }              else              {                     return;              }       }                //-->   </script>
      

  6.   

    关注这个问题的兄弟,希望同时关注http://community.csdn.net/Expert/topic/4397/4397284.xml?temp=.6518366这个是我的问题,也是同样的问题。我们并不是过度使用javascript,只是为了使用回调而已。在asp.net的过程中,不使用javascript几乎也不可能的。特别是在做一些验证时,虽然有现成的验证控件,但并没有使用js能有更好用户体验。autopostback这个属性,我也没找到,所以,我是在page_load里,增加了onclick事件,再return false; 基本上就可以阻止回发了。上面的兄弟写的操作treeview的JS,是用来操作MS以前单独提供的TreeView控件的。在vs2005里自带的TreeView里,是不支持这种方法的,具体可以看我上面写的链接地址。
      

  7.   

    同时,搭路再提个蛮奇怪的问题。我在vs2005里,使用一般的技术建立的应用程序。
    每点击一个按钮,都刷新得很厉害,注意:是很厉害,能非常明显地看到背景的加载。这个程序就运行在我本机上呢,数据库也在我本机上的。(这也是我之所以,采用ClientScriptCallBack的原因)但我们以前的一些同样程序,使用vs2005 beta1编写的,还有asp编写的,刷新得好像都没有这么厉害,有些几乎没有刷新的感觉,就是一点击就取到了数据,界面根本没有什么刷新的感觉。
    我看了相关的源程序,也没有使用什么无刷新技术呀,这是怎么回事呢?这些程序的数据库还在专门的服务器上呢。希望有兄弟帮忙。谢谢。(我使用了MasterPages,MasterPages是使用了div来布局的。同时禁用了缓存。MS不是说,如果使用MasterPages可以更好的防止刷新吗?)
      

  8.   

    我这个程序也是运行在小区宽带里边(住家里)。如果你发现你的闪烁比它厉害,应该是编程问题。因为我没有用任何过度技术。http://cmda618.vicp.net/w2cms
      

  9.   

    pantian(白天傻子) ( ) 信誉:100 呵呵,兄弟你找到答案了通知一下我
    我已经结贴了,我的MSN:[email protected]