学海无涯

导航

统计

Dev TreeList 树形结构

一.您将treeList.OptionsView.ShowCheckBoxes设置为True,树形结构前就会出现CheckBox选择框,如果您想达到选择父节点,子节点也同时选中的效果,需将treeList.OptionsBehavior.AllowRecursiveNodeChecking设置为True。

 

 设置完即可看到效果,如图:

 二.扩展方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
namespace LG.APS.Client.CustomControls.Extensions
{
    public static class TreeListExtension
    {
        private static List<TreeListNode> selectedTreeListNodes = new List<TreeListNode>();
        /// <summary>
        /// 得到已选择的全部节点
        /// </summary>
        /// <param name="parentNode"></param>
        /// <returns></returns>
        private static List<TreeListNode> GetAllCheckedNodes(TreeListNode parentNode)
        {
            if (parentNode.Nodes.Count == 0)
            {
                return selectedTreeListNodes;//递归终止
            }
            foreach (TreeListNode node in parentNode.Nodes)
            {
                if (node.CheckState == CheckState.Checked)//判断当前节点选择状态
                {
                    selectedTreeListNodes.Add(node);
                }
                if (node.HasChildren)
                {
                    GetAllCheckedNodes(node);//执行递归
                }
            }
            return selectedTreeListNodes;
        }
        /// <summary>
        /// 得到已选择的全部节点
        /// </summary>
        /// <param name="treeList"></param>
        /// <returns></returns>
        public static List<TreeListNode> GetAllCheckedNodes(this TreeList treeList)
        {
            selectedTreeListNodes.Clear();
            List<TreeListNode> selectedNodes = new List<TreeListNode>();
            if (treeList.Nodes.Count > 0)
            {
                foreach (TreeListNode node in treeList.Nodes)//拿所有结点
                {
                    selectedNodes.AddRange(GetAllCheckedNodes(node));
                }
            }
            return selectedNodes;
        }
        /// <summary>
        /// 得到已选择的他部节点对应的对象实例列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="treeList"></param>
        /// <param name="parentNode"></param>
        /// <returns></returns>
        public static List<T> GetAllCheckedObject<T>(this TreeList treeList)
        {
            List<T> results = new List<T>();
            List<TreeListNode> selectedTreeListNodes = new List<TreeListNode>();
            if (treeList.Nodes.Count > 0)
            {
                selectedTreeListNodes = treeList.GetAllCheckedNodes();
            }
            foreach (var node in selectedTreeListNodes)
            {
                results.Add((T)treeList.GetDataRecordByNode(node));
            }
            return results;
        }
    }
}

  

 

官方例子:

https://docs.devexpress.com/WindowsForms/120672/controls-and-libraries/tree-list/feature-center/focus-selection-and-navigation/node-checking-checkboxes-and-radio-buttons

https://www.cnblogs.com/improveself/articles/12195941.html

posted on   宁静致远.  阅读(76)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2023-03-14 Dapper 引入到项目
点击右上角即可分享
微信分享提示