1。VS2005 中的TreeView 怎么设置使得节点没有超链接?
默认的有超链接,比较烦。2。VS2005 中的TreeView 怎么用JS得到选中CheckBox节点的Value?
我怎么取都取不到,Text我可以取到,怎么才能取到Value?3。选中一节点其子节全选,其父节点也选中,用JS明天如果三个问题都有答案就结帐,谢谢各位。。
2003和2005的树差别太大了,好郁闷

解决方案 »

  1.   

    原来也想使用treeview的,可最后放弃了,为了一个树状列表要浪费一个宝贵的<form>,个人觉得太不值得了
      

  2.   

    <%@ Page Language="C#" %>
    <script runat="server">
     protected void Page_Load(object sender, EventArgs e)
     {
       TreeView1.Attributes.Add("onclick", "OnClientTreeNodeChecked(event)");
     }
     protected void Button1_Click(object sender, EventArgs e)
     {
       if (Request.Form["CheckedNode"] != null)
       {
         string CheckedNodeValue = Request.Form["CheckedNode"];
         if (CheckedNodeValue == "")
           return;
         
         if (CheckedNodeValue.EndsWith(","))
           CheckedNodeValue = CheckedNodeValue.TrimEnd(',');
       
         Response.Write("您选择的节点有:"+CheckedNodeValue);
       }
     } 
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
    <script type="text/javascript" language="javascript">
     //识别不同的浏览器
     function getTargetElement(evt) {
       var elem
       if (evt.target)
       {
         elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target
       } 
       else 
       {
         elem = evt.srcElement
       }
       return elem
     }
      function OnClientTreeNodeChecked(evt)
      {
        evt = (evt) ? evt : ((window.event) ? window.event : "");
        if(evt == "")
        {
          return;
        }
        var obj = getTargetElement(evt);
        var hasTreeNode = false;
        if(obj.tagName)
        {
          if (obj.tagName == "INPUT" && obj.type == "checkbox") {
            var treeNode = obj;
            while (obj.tagName != "TABLE")
            {
              obj = obj.parentNode;
            }
            var parentTreeDeep = obj.rows[0].cells.length;
            var parentTreeNode = obj.rows[0].cells[0];
            var oDiv = obj.parentNode;
            if( null == oDiv )
            {
              return;
            }
            if( 1 != oDiv.nodeType)
            {
              return;
            }
            var tables = oDiv.getElementsByTagName("TABLE");
            if( null == tables)
            {
              return;
            }
            var tableCount = tables.length;
            if(tableCount < 1)
            {
              return;
            }    
            for (i = 0; i < tableCount; i++)
            {
              if ( obj == tables[i] )
              {
                hasTreeNode = true;
                i++;
                if (tableCount == i )
                {
                  return;
                }
              }
              if (hasTreeNode)
              {
                var childTreeDeep = tables[i].rows[0].cells.length;
                if (childTreeDeep > parentTreeDeep)
                {
                  var cellTreeNode = tables[i].rows[0].cells[childTreeDeep - 1];
                  var inputs = cellTreeNode.getElementsByTagName("INPUT");
                  if( null != inputs)
                  {
                    inputs[0].checked = treeNode.checked;
                  }
                }
                else
                {
                  return;
                }
              }
            }
          }
        }
      } 
     function ShowCheckbox()
     { 
       var TreeView = "<%=TreeView1.ClientID %>"
       var checkNode = document.getElementById("CheckedNode")
       var checkboxs = document.getElementById(TreeView).getElementsByTagName("INPUT")
       for(i=0;i<checkboxs.length;i++)
       {
         if(checkboxs[i].type == "checkbox" 
           &&  checkboxs[i].name.substr(0,TreeView.length) == TreeView
           && checkboxs[i].checked )
         {
           checkNode.value += checkboxs[i].title + ","
         }
       }
       alert(checkNode.value)
     }
     </script>
    </head>
    <body>
     <form id="form1" runat="server">
       <asp:TreeView ID="TreeView1" runat="server" ShowLines="true"
         ShowCheckBoxes="All">
         <Nodes>
           <asp:TreeNode Text="【孟子E章】站点一" SelectAction="SelectExpand">
             <asp:TreeNode Text="ASP.NET技术">
               <asp:TreeNode Text="缓存管理"/>
               <asp:TreeNode Text="状态管理" />
               <asp:TreeNode Text="导航控件">
                 <asp:TreeNode Text="Menu 服务器控件" />
                 <asp:TreeNode Text="SiteMapPath 服务器控件" />
               </asp:TreeNode>
             </asp:TreeNode>
             <asp:TreeNode Text="C#技术" />
           </asp:TreeNode>
           <asp:TreeNode Text="【孟子E章】站点二" />
           <asp:TreeNode Text="【孟子E章】站点三">
             <asp:TreeNode Text="Web开发技术" />
             <asp:TreeNode Text="Web脚本库" />
           </asp:TreeNode>
         </Nodes>
       </asp:TreeView>
       <input type="hidden" name="CheckedNode"  id="CheckedNode"/>
       <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" 
         OnClientClick="ShowCheckbox();" Text="提交" />
     </form>
    </body>
    </html>
      

  3.   

    1 新增节点的时候treenode.SelectAction = TreeNodeSelectAction.None;就没有超链接
    2 value存在viewstate中,用js取不到
      

  4.   

    前一个项目里还用过,功能完全相同,不过代码在公司的机器里!新的 TreeView 是比较麻烦,但是用 JS 写个递归还是很容易搞定的!
      

  5.   

    cs: TreeView1.Attributes.Add("onclick", "CheckHandler()");aspx:
    function public_GetParentByTagName(element, tagName)
      {
       var parent = element.parentNode;
       var upperTagName = tagName.toUpperCase();
       while (parent && (parent.tagName.toUpperCase() != upperTagName))
       {
       parent = parent.parentNode ? parent.parentNode : parent.parentElement;
       }
       return parent;
      }
      
      function setParentChecked(objNode)
      {
       var objParentDiv = public_GetParentByTagName(objNode,"div");
       if(objParentDiv==null || objParentDiv == "undefined")
       {
       return;
       }
       var objID = objParentDiv.getAttribute("ID");
       objID = objID.substring(0,objID.indexOf("Nodes"));
       objID = objID+"CheckBox";
       var objParentCheckBox = document.getElementById(objID);
       if(objParentCheckBox==null || objParentCheckBox == "undefined")
       {
       return;
       }
       if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
       return;
       objParentCheckBox.checked = true;
       setParentChecked(objParentCheckBox);
      }
      
      function setChildUnChecked(divID)
      {
       var objchild = divID.children;
       var count = objchild.length;
       for(var i=0;i<objchild.length;i++)
       {
       var tempObj = objchild[i];
       if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
       {
       tempObj.checked = false;
       }
       setChildUnChecked(tempObj);
       }
      }  function setChildChecked(divID)
      {
       var objchild = divID.children;
       var count = objchild.length;
       for(var i=0;i<objchild.length;i++)
       {
       var tempObj = objchild[i];
       if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
       {
       tempObj.checked = true;
       }
       setChildChecked(tempObj);
       }
      }  function CheckHandler()
      {
      
       var objNode = event.srcElement;
      
       if(objNode.tagName!="INPUT" || objNode.type!="checkbox")
       return;
      
       if(objNode.checked==true)
       {
       setParentChecked(objNode);
       var objID = objNode.getAttribute("ID");
       var objID = objID.substring(0,objID.indexOf("CheckBox"));
       var objParentDiv = document.getElementById(objID+"Nodes");
       if(objParentDiv==null || objParentDiv == "undefined")
       {
       return;
       }
       setChildChecked(objParentDiv);
       }
       else
       {
       var objID = objNode.getAttribute("ID");
       var objID = objID.substring(0,objID.indexOf("CheckBox"));
       var objParentDiv = document.getElementById(objID+"Nodes");
       if(objParentDiv==null || objParentDiv == "undefined")
       {
       return;
       }
       setChildUnChecked(objParentDiv);
       }
      }
      

  6.   

    2。VS2005 中的TreeView 怎么用JS得到选中CheckBox节点的Value?
    我怎么取都取不到,Text我可以取到,怎么才能取到Value?用JS真的取不到Value值吗?
      

  7.   

    2 value存在viewstate中,用js取不到