TreeList自带勾选框实现批量勾选

现在有这么一个常见的功能需求:树形控件需要批量勾选,且勾选父节点默认将子节点全部勾上;当子节点全部取消勾选后,父节点的勾选也取消掉;勾选一个子节点,默认就把父节点也置于勾选状态。

最常见的案例就是windows功能,Dev提供了一个很强大的树形控件-TreeList,同样可以实现这些简单效果。

首先我们要知道TreeList自带的勾选控件在哪

treelist.OptionsSelection.MultiSelect = True;
treelist.OptionsSelection.UseIndicatorForSelection = True;
treelist.OptionsView.ShowCheckBoxes = True;

设置好这些属性后,再了解一个事件 treelist_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)

简单理解为 用户更改节点的勾选状态后发生。 当我们勾选其中一个节点后,通过递归的方式自下而上或自上而下去寻找父|子节点。

        //勾选|取消勾选 父节点,递归处理子节点
        private bool m_SetClick = true; 
        private void SetSubNodeCheck(TreeListNode p_TreeNode, bool p_SelectCheck)
        {
            m_SetClick = false;
            foreach (TreeListNode _SubNode in p_TreeNode.Nodes)
            {
                _SubNode.Checked = p_SelectCheck;
                SetSubNodeCheck(_SubNode, p_SelectCheck);
            }
        }
        //勾选子节点,父节点同样勾上
        private void SetParentCheck(TreeListNode p_TreeNode)
        {
            if (p_TreeNode.Checked && p_TreeNode.ParentNode != null)
            {
                p_TreeNode.ParentNode.Checked = true;
                SetParentCheck(p_TreeNode.ParentNode);
            }
        }
        //如果当前分支下最后一个勾选的子节点取消勾选,父节点勾选状态取消
        private void SetParentNotCheck(TreeListNode p_TreeNode)
        {
            if (!p_TreeNode.Checked && p_TreeNode.ParentNode != null)
            {
                foreach (TreeListNode _Node in p_TreeNode.ParentNode.Nodes)
                {
                    if (_Node.Checked) return;
                }
                p_TreeNode.ParentNode.Checked = false;
                SetParentNotCheck(p_TreeNode.ParentNode);
            }
        }
        private void tlBoi_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
        {
            // 禁用TreeView视图重绘的功能。
            tlDetail.BeginUpdate();
            if (m_SetClick)
            {
                SetSubNodeCheck(e.Node, e.Node.Checked);
                SetParentCheck(e.Node);
                SetParentNotCheck(e.Node);
                m_SetClick = true;
            }
            // 启用TreeView视图重绘的功能。
            tlDetail.EndUpdate();
        }

TreeList自带勾选框批量勾选基本就这么多东西,当然还有其它方式可以实现批量勾选,比如:增加勾选列,列中关联checkEdit控件。这里就不详细说了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值