DevExpress XtraTreeList控件设置多选模式

一、使用控件自带的功能

       官方自带的Demo里面就有,在此仅列出常用的属性/方法/事件;

1、多选模式

(1)效果图(截取自官方Demo)

      DevExpress XtraTreeList控件设置多选模式

 

(2)涉及的属性/方法/事件

// 启用多选功能
treeList.OptionsSelection.MultiSelect = true;
// 设置多选模式
treeList.OptionsSelection.MultiSelectMode = TreeListMultiSelectMode.CellSelect;

      选中的节点可以通过treeList1.Selection获取。显然,这种方法对于有些用户是不太友好的,请看勾选功能。

2、勾选模式

(1)效果图(截取自官方Demo)

        DevExpress XtraTreeList控件设置多选模式

 

 

(2)涉及的属性/方法/事件

// 显示勾选框
treeList.OptionsView.ShowCheckBoxes = true;

//设置勾选框样式(一般情况下只需要设置这一条属性就可以了)
 treeList1.OptionsView.CheckBoxStyle = DevExpress.XtraTreeList.DefaultNodeCheckBoxStyle.Check;


//自定义不同节点勾选框样式
treeList.Nodes[0].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Check;
treeList.Nodes[1].Nodes[0].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;
treeList.Nodes[1].Nodes[1].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;
treeList.Nodes[1].Nodes[2].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;

//获取勾选的节点
 this.treeList.GetAllCheckedNodes();

//选中/取消选中节点及其子节点
e.Node.CheckAll();
e.Node.UncheckAll();

//允许有中间状态
this.treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;

//选中节点时,自动选中子节点
 treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true

//选中节点前触发事件
this.treeList1.BeforeCheckNode

//选中节点后触发事件
this.treeList1.AfterCheckNode

  

二、自定义勾选模式

       官方自带的功能可以能满足大多数使用场景。但美中不足的是,在AllowRecursiveNodeChecking功能启用时,没有办法单独选中有子节点的节点。

下面的方法利用BeforeCheckNode事件,实现选中节点的各种姿势:

 private void TreeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
        {
            bool allChildNodeChecked = true;
            bool allChildNodeUnChecked = true;
            for (int i = 0; i < e.Node.Nodes.Count; i++)
            {
                if (e.Node.Nodes[i].CheckState == CheckState.Checked)
                    allChildNodeUnChecked = false;
                if (e.Node.Nodes[i].CheckState == CheckState.Unchecked)
                    allChildNodeChecked = false;
            }

            if(e.Node.CheckState==CheckState.Unchecked&&allChildNodeUnChecked)
            {
                e.Node.CheckState = CheckState.Checked;
            }
            else if(!allChildNodeChecked&&!allChildNodeUnChecked)
            {
                e.Node.CheckAll();
            }
            else if(e.Node.CheckState==CheckState.Checked&&allChildNodeUnChecked)
            {
                e.Node.CheckAll();
            }
            else if(e.Node.CheckState==CheckState.Checked&&allChildNodeChecked)
            {
                e.Node.UncheckAll();
            }
        }

  

效果图:

                 DevExpress XtraTreeList控件设置多选模式

上一篇:LeetCode-102-二叉树的层序遍历


下一篇:onnxruntime 使用,删除、修改