ASP.NET TreeView级联选择问题

翻译|其它|编辑:郝浩|2007-09-28 15:47:41.000|阅读 1113 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

关于  ASP.NET TreeView  控件级联选择问题,网上有不少的解决办法。个人觉得给  TreeView 注册  onclick  事件是最好的办法。下面是用于级联选择的一个  JavaScript  方法,将此方法注册到  TreeView    onclick  即可实现级联选择:

    function CheckSubNodes()

    {

         var obj = window.event.srcElement;

         var TreeNodeFound = false;

         var CheckedState;

         if(obj.tagName=="INPUT"&&obj.type=="checkbox")

         {

             var TreeNode = obj;

             CheckedState = obj.checked;

             do

             {

                 obj = obj.parentNode;

             }

             while(obj.tagName!="TABLE")

             var parentTreeLevel = obj.rows[0].cells.length;

             var parentTreeNode = obj.rows[0].cells[0];

             var tables = obj.parentElement.getElementsByTagName("TABLE");

             var numTables = tables.length;

             if(numTables>=1)

             {

                  for(var i=0;i<=numTables;i++)

                  {

                      if(tables[i]==obj)

                      {

                           TreeNodeFound = true;

                           i++;

                           if(i==numTables)

                           {

                                return;

                           }

                      }

                      if(TreeNodeFound==true)

                      {

                           var childTreeLevel = tables[i].rows[0].cells.length;

                           if (childTreeLevel > parentTreeLevel)

                           {

                                 var cell = tables[i].rows[0].cells[childTreeLevel - 1];

                                 var inputs = cell.getElementsByTagName("INPUT");

                                 inputs[0].checked = CheckedState;

                            }

                            else

                            {

                                 return;

                            }

                      }

                  }

             }

         }

}

说实话,这段  JavaScript  代码是比较冗长的,我建了一个页面,里面包含一个  TreeView,用于测试此方法:

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>TreeView  级联选择</title>

<script language="javascript">

    function CheckSubNodes()

    {

         var obj = window.event.srcElement;

         var TreeNodeFound = false;

         var CheckedState;

         if(obj.tagName=="INPUT"&&obj.type=="checkbox")

         {

             var TreeNode = obj;

             CheckedState = obj.checked;

             do

             {

                 obj = obj.parentNode;

             }

             while(obj.tagName!="TABLE")

             var parentTreeLevel = obj.rows[0].cells.length;

             var parentTreeNode = obj.rows[0].cells[0];

             var tables = obj.parentElement.getElementsByTagName("TABLE");

             var numTables = tables.length;

             if(numTables>=1)

             {

                  for(var i=0;i<=numTables;i++)

                  {

                      if(tables[i]==obj)

                      {

                           TreeNodeFound = true;

                           i++;

                           if(i==numTables)

                           {

                                return;

                           }

                      }

                      if(TreeNodeFound==true)

                      {

                           var childTreeLevel = tables[i].rows[0].cells.length;

                           if (childTreeLevel > parentTreeLevel)

                           {

                                 var cell = tables[i].rows[0].cells[childTreeLevel - 1];

                                 var inputs = cell.getElementsByTagName("INPUT");

                                 inputs[0].checked = CheckedState;

                            }

                            else

                            {

                                 return;

                            }

                      }

                  }

             }

         }

       }

</script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True" onclick="CheckSubNodes()">

            <Nodes>

                <asp:TreeNode Text="新建节点1" Value="新建节点1">

                    <asp:TreeNode Text="新建节点1.1" Value="新建节点1.1">

                        <asp:TreeNode Text="新建节点1.1.1" Value="新建节点1.1.1"></asp:TreeNode>

                    </asp:TreeNode>

                </asp:TreeNode>

                <asp:TreeNode Text="新建节点2" Value="新建节点2">

                    <asp:TreeNode Text="新建节点2.1" Value="新建节点2.1"></asp:TreeNode>

                    <asp:TreeNode Text="新建节点2.2" Value="新建节点2.2"></asp:TreeNode>

                </asp:TreeNode>

                <asp:TreeNode Text="新建节点3" Value="新建节点3">

                    <asp:TreeNode Text="新建节点3.1" Value="新建节点3.1"></asp:TreeNode>

                </asp:TreeNode>

                <asp:TreeNode Text="新建节点4" Value="新建节点4"></asp:TreeNode>

            </Nodes>

        </asp:TreeView>

    </div>

    </form>

</body>

</html>

测试时,点击新建节点1.1”会出错(但此方法还是实现了功能,尽管出错了),在开启  IE  调试功能时会弹出错误提示,若没有开启  IE  调试状态栏也会出现错误提示。下面是我的一个方法:

    function CheckSubNodes()

    {

          var obj = window.event.srcElement;

          var CheckState;

          if(obj.tagName=="INPUT"&&obj.type=="checkbox")

          {

               CheckState = obj.checked;

               do

               {

                   obj = obj.parentNode;

               }

               while(obj.tagName!="TABLE")

               if(obj.nextSibling!=null&&obj.nextSibling.tagName=="DIV")

               {

                    obj = obj.nextSibling;

                    var inputs = obj.getElementsByTagName("INPUT");

                    if(inputs.length>0)

                    {

                         for(var i=0;i<inputs.length;i++)

                         {

                             inputs[i].checked = CheckState;

                         }

                    }

               }

          }

    }

与上一个方法比起来,这个方法比上一个简练(效率自然也高一些),且没有任何错误(在  IE 7下测试)。要测试此方法,请将上述测试页面  CheckSubNodes()方法替换为我的方法。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP