由于Treeview生成的代码解析出来后CheckBox的name都具有不同的名字,所以网上的大部分checkbox全选,取消的解决方案都不适用。我用的方法首先解决了这个问题,另外还加入了对读取出来的Treeview的选中情况进行判断,是否被全部选中,如果被全部选中,读取出来的时候就把全选的钩钩上。先给大家看看我的前端代码:

?View Code JAVASCRIPT
       function checkAll(layout) {
            var el = document.getElementById(layout).getElementsByTagName('input');
            var len = el.length;
            for (var i = 0; i < len; i++) {
                if (el[i].type == "checkbox")
                { el[i].checked = true; }
            }
        }
        function clearAll(layout) {
            var el = document.getElementById(layout).getElementsByTagName('input');
            var len = el.length;
            for (var i = 0; i < len; i++) {
                if (el[i].type == "checkbox")
                { el[i].checked = false; }
            }
        }
        function checknode(layout, checkboxname) {
            document.getElementById(checkboxname).checked = true;
            var el = document.getElementById(layout).getElementsByTagName('input');
            var len = el.length;
            for (var i = 0; i < len; i++) {
                if ((el[i].type == "checkbox") && (el[i].checked == false)) {
                    document.getElementById(checkboxname).checked = false;
                }
            }
        }
         <input id="Checkboxcheckall" onclick="if(this.checked==true) { checkAll('checkboxlayout'); } else { clearAll('checkboxlayout'); }" type="checkbox" value="on" />全部选中
<div id="checkboxlayout"><asp:TreeView ID="TreeViewGS" runat="server">
                            <ParentNodeStyle Font-Bold="False" />
                        </asp:TreeView></div>

         checkAll()方法的作用就是选中全部的节点,clearAll则是清除所有节点选中。相比网上的方法,我的方法只是加入了一个容器,判断选中容器中的checkbox,而不是具有相同name的checkbox。

后台程序C#代码:

     //页面加载首次加载时检查选中状态
            this.TreeViewGS.Attributes.Add("onclick", "checknode('checkboxlayout','Checkboxcheckall');");
 
        //调用js检查是否全选(使用Ajax回发)。TreeView数据填充时检查是否全选。
        ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "checkallchecking", "checknode('checkboxlayout','Checkboxcheckall');", true);