实现当TreeView中父节点的CheckBox的点选状态改变时,回发服务器端,并且选中父节点,所有子节点全选中

来源:互联网 发布:柳岩与丁磊看望程序员 编辑:程序博客网 时间:2024/05/21 11:35
实现当TreeView中父节点的CheckBox的点选状态改变时
回发服务器端
触发TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)事件
从而通过代码来控制子节点的CheckBox的点选状态 一同改变
主要步骤及代码示例如下:
1.TreeView绑定onclick事件
  通过本事件 引发回发
2.在TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)事件
  编写相关代码 控制子节点的CheckBox点选状态
-------------------- HTML 页面部分 -----------------------
<%@ Page Language="C#" CodeFile="1.aspx.cs"
Inherits="Manage_treeviewtest" %>
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <script type="text/javascript">
// 点击复选框时触发事件
function postBackByObject()
{
    var o = window.event.srcElement;
    if (o.tagName == "INPUT" && o.type == "checkbox")
  {
    __doPostBack("","");
                 }

 }



 //TreeView onclick触发事件      
    function client_OnTreeNodeChecked(event) {
        //得到当前所Click的对象
        var objNode;
        if (!public_IsObjectNull(event.srcElement)) {
            //IE  
            objNode = event.srcElement;
        }
        else {
            //FF  
            objNode = event.target;
        }


        //判断是否Click的CheckBox  
        if (!public_IsCheckBox(objNode))
            return;


        var objCheckBox = objNode;
        //根据CheckBox状态进行相应处理
        if (objCheckBox.checked == true) {
            //递归选中父节点的CheckBox  
            setParentChecked(objCheckBox);


            //递归选中所有的子节点  
            setChildChecked(objCheckBox);
        }
        else {
            //递归取消选中所有的子节点  
            setChildUnChecked(objCheckBox);


            //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中).  
            setParentUnChecked(objCheckBox);
        }
        //getEle()
    }


    function getEle() {
        debugger
        var tree = document.getElementById("TreeView1").getElementsByTagName("INPUT");
        for (var i = 0; i < tree.length; i++) {
            if (tree[i].type == "checkbox" && tree[i].checked) {
                alert(tree[i].nextSibling.firstChild.nodeValue + "  " + tree[i].nextSibling.firstChild.text);
            }
        }
    }


    //判断对象是否为空  
    function public_IsObjectNull(element) {
        if (element == null || element == "undefined")
            return true;
        else
            return false;
    }


    //判断对象是否为CheckBox  
    function public_IsCheckBox(element) {
        if (public_IsObjectNull(element))
            return false;


        if (element.tagName != "INPUT" || element.type != "checkbox")
            return false;
        else
            return true;
    }
    //得到包含所有子节点的Node(Div对象)  
    function public_CheckBox2Node(element) {
        var objID = element.getAttribute("ID");
        objID = objID.substring(0, objID.indexOf("CheckBox"));
        return document.getElementById(objID + "Nodes");
    }
    //得到父节点的CheckBox  
    function public_Node2CheckBox(element) {
        var objID = element.getAttribute("ID");
        objID = objID.substring(0, objID.indexOf("Nodes"));
        return document.getElementById(objID + "CheckBox");
    }
    //得到本节点所在的Node(Div对象)  
    function public_GetParentNode(element) {
        var parent = element.parentNode;
        var upperTagName = "DIV";
        //如果这个元素还不是想要的tag就继续上溯  
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        return parent;
    }




    //设置节点的父节点Checked  
    function setParentChecked(currCheckBox) {
        var objParentNode = public_GetParentNode(currCheckBox);
        if (public_IsObjectNull(objParentNode))
            return;


        var objParentCheckBox = public_Node2CheckBox(objParentNode);


        if (!public_IsCheckBox(objParentCheckBox))
            return;


        objParentCheckBox.checked = true;
        setParentChecked(objParentCheckBox);
    }


    //当父节点的所有子节点都未被选中时,设置父节点UnChecked  
    function setParentUnChecked(currCheckBox) {
        var objParentNode = public_GetParentNode(currCheckBox);
        if (public_IsObjectNull(objParentNode))
            return;
        //判断currCheckBox的同级节点是否都为UnChecked.  
        if (!IsMyChildCheckBoxsUnChecked(objParentNode))
            return;


        var objParentCheckBox = public_Node2CheckBox(objParentNode);


        if (!public_IsCheckBox(objParentCheckBox))
            return;


        objParentCheckBox.checked = false;
        setParentUnChecked(objParentCheckBox);
    }


    //设置节点的子节点UnChecked  
    function setChildUnChecked(currObj) {
        var currNode;
        if (public_IsCheckBox(currObj)) {
            currNode = public_CheckBox2Node(currObj);
            if (public_IsObjectNull(currNode))
                return;
        }
        else
            currNode = currObj;


        var currNodeChilds = currNode.childNodes;
        var count = currNodeChilds.length;
        for (var i = 0; i < count; i++) {
            var childCheckBox = currNodeChilds[i];
            if (public_IsCheckBox(childCheckBox)) {
                childCheckBox.checked = false;
            }
            setChildUnChecked(childCheckBox);
        }
    }


    //设置节点的子节点Checked  
    function setChildChecked(currObj) {
        var currNode;
        if (public_IsCheckBox(currObj)) {
            currNode = public_CheckBox2Node(currObj);
            if (public_IsObjectNull(currNode))
                return;
        }
        else
            currNode = currObj;


        var currNodeChilds = currNode.childNodes;
        var count = currNodeChilds.length;
        for (var i = 0; i < count; i++) {
            var childCheckBox = currNodeChilds[i];
            if (public_IsCheckBox(childCheckBox)) {
                childCheckBox.checked = true;
            }
            setChildChecked(childCheckBox);
        }
    }


    //判断该节点的子节点是否都为UnChecked
    function IsMyChildCheckBoxsUnChecked(currObj) {
        var retVal = true;


        var currNode;
        if (public_IsCheckBox(currObj) && currObj.checked == true) {
            return false;
        }
        else
            currNode = currObj;


        var currNodeChilds = currNode.childNodes;
        var count = currNodeChilds.length;
        for (var i = 0; i < count; i++) {
            if (retVal == false)
                break;
            var childCheckBox = currNodeChilds[i];
            if (public_IsCheckBox(childCheckBox) && childCheckBox.checked == true) {
                retVal = false;
                return retVal;
            }
            else
                retVal = IsMyChildCheckBoxsUnChecked1(childCheckBox);
        }
        return retVal;
    } 

    </script>
    <div>
         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:TreeView ID="TreeView1" runat="server" ExpandDepth="0"
ShowCheckBoxes="All"
                    OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">
                </asp:TreeView>
            </ContentTemplate>
            <Triggers>
            </Triggers>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>
 
 
--------------------- cs页面代码 --------------------
public partial class Manage_treeviewtest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CreartAreaTree();

            TreeView1.Attributes.Add("onclick", "postBackByObject(),client_OnTreeNodeChecked(null)");

        }
    }
  /// <summary>
    /// 选中某节点下的所有项
    /// </summary>
    /// <param name="node">节点</param>
    /// <param name="state">是否点击</param>
    public void selectChildList(TreeNode node,bool state)
    {
        foreach (TreeNode childnode in node.ChildNodes)
        {
            childnode.Checked = state;
            selectChildList(childnode,state);
        }
    }
    protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
    {
      CheckChildCheckBox(e.Node.Value, null);
            lblFUnitNum.Text = "";
            HiddenField1.Value = "";
            getSelectedNode(null);

    }



 public void getSelectedNode(TreeNode pNode)
        {
            if (pNode == null)
            {
                foreach (TreeNode node in TreeView1.Nodes)
                {
                    if (node.Checked)
                    {
                        HiddenField1.Value += node.Value + ",";
                        lblFUnitNum.Text += node.Text + ",";
                    }
                    getSelectedNode(node);
                }
            }
            else
            {
                foreach (TreeNode node in pNode.ChildNodes)
                {
                    if (node.Checked)
                    {
                        HiddenField1.Value += node.Value + ",";
                        lblFUnitNum.Text += node.Text + ",";
                    }
                    getSelectedNode(node);
                }
            }
        }



//父级选中,子级也选中

   private void CheckChildCheckBox(string selectNode, TreeNode pNode)
        {
            if (pNode == null)
            {
                foreach (TreeNode node in TreeView1.Nodes)
                {
                    if (node.Parent != null)
                    {
                        if (node.Parent.Value == selectNode)
                        {
                            if (node.Parent.Checked == true)
                            {
                                node.Checked = true;
                            }
                            else
                            {
                                node.Checked = false;
                            }
                        }


                        //if (node.Checked == false)
                        //{
                        //    node.Parent.Checked = false;
                        //}
                    }


                    CheckChildCheckBox(selectNode, node);
                }
            }
            else
            {
                foreach (TreeNode node in pNode.ChildNodes)
                {
                    if (node.Parent != null)
                    {
                        if (node.Parent.Value == selectNode)
                        {
                            if (node.Parent.Checked == true)
                            {
                                node.Checked = true;
                            }
                            else
                            {
                                node.Checked = false;
                            }
                        }
                        else
                        {
                            node.Parent.Checked = true;
                        }
                    }


                    //if (node.Checked == false)
                    //{
                    //    node.Parent.Checked = false;
                    //}
                    CheckChildCheckBox(selectNode, node);
                }
            }
        }








0 0