树节点级联选中

来源:互联网 发布:mysql数据库pdf 编辑:程序博客网 时间:2024/06/09 17:26

/// <summary>
        /// 级联选中树节点
        /// </summary>
        /// <param name="node"></param>
        private void CheckAllParentNodes(TreeNode node)
        {
            if (node.Parent != null)
            {
                //如果当前是选中状态

                if (node.Checked)
                {
                    node.Parent.Checked = node.Checked;
                    CheckAllParentNodes(node.Parent);
                }
                else//从选中到未选中
                {
                    //未找到一个选择的改变父节点状态
                    if (node.Parent.Nodes.Cast<TreeNode>().ToList().Find(f => f.Checked == !node.Checked) == null)
                    {
                        node.Parent.Checked = node.Checked;
                        CheckAllParentNodes(node.Parent);
                    }
                }
            }
        }

        /// <summary>
        /// 选中所有子节点
        /// </summary>
        /// <param name="tree"></param>
        private void CheckAllChildNodes(TreeNode tree)
        {
            foreach (TreeNode node in tree.Nodes)
            {
                node.Checked = tree.Checked;
                if (node.Nodes.Count > 0)
                {
                    this.CheckAllChildNodes(node);
                }
            }
        }

//使用

  if (e.Action != TreeViewAction.Unknown)
            {
                this.CheckAllChildNodes(e.Node);
                this.CheckAllParentNodes(e.Node);
            }
原创粉丝点击