實現當TreeView中父節點的CheckBox的點選狀態改變時,回發服務器端,並且選中父節點,所有子節點全選中

實現當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);
                }
            }
        }








發佈了35 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章