treeview 父子节点联动

        #region treeview联动方法

        private void UpdateCheckStatus(TreeViewEventArgs e)

        {



            CheckAllChildNodes(e.Node);



            UpdateAllParentNodes(e.Node);



        }







        // updates all parent nodes recursively.



        private void UpdateAllParentNodes(TreeNode treeNode)

        {



            TreeNode parent = treeNode.Parent;



            if (parent != null)

            {



                if (parent.Checked && !treeNode.Checked)

                {



                    parent.Checked = false;



                    UpdateAllParentNodes(parent);



                }



                else if (!parent.Checked && treeNode.Checked)

                {



                    bool all = true;



                    foreach (TreeNode node in parent.Nodes)

                    {



                        if (!node.Checked)

                        {



                            all = false;



                            break;



                        }



                    }



                    if (all)

                    {



                        parent.Checked = true;



                        UpdateAllParentNodes(parent);



                    }



                }



            }



        }







        // updates all child tree nodes recursively.



        private void CheckAllChildNodes(TreeNode treeNode)

        {



            foreach (TreeNode node in treeNode.Nodes)

            {



                node.Checked = treeNode.Checked;



                if (node.Nodes.Count > 0)

                {



                    // If the current node has child nodes, call the CheckAllChildsNodes method recursively.



                    this.CheckAllChildNodes(node);



                }



            }



        }



        #endregion

        #region treeview上下级联动事件

        private void tvDevc_AfterCheck(object sender, TreeViewEventArgs e)

        {

            if (e.Action != TreeViewAction.Unknown)

            {



                UpdateCheckStatus(e);



            }



        }

        #endregion


你可能感兴趣的:(treeview)