[WinForm][DevExpress][TreeList]向上递归,获取公共父节点

2020-12-13 03:26

阅读:542

标签:des   winform   style   class   blog   code   

最近项目开发中,需要获取到公共节点,如图:

soscw.com,搜素材

譬如,当点击“Test103-2”节点,其类型是“灯”类型,那怎么获取到“中心区域”这个类型是“地域”的公共节点了?(不知道描述清楚木有哈)

核心代码:

        /// 
        /// 向上递归,获取符合条件的父节点
        /// 
        /// 需要向上递归的节点
        /// 判断条件【委托】
        /// 符合条件的节点【TreeListNode】
        public static TreeListNode GetParentNode(this TreeListNode node, Predicate conditionHanlder)
        {
            TreeListNode _parentNode = node.ParentNode;//获取上一级父节点
            TreeListNode _conditonNode = null;
            if (_parentNode != null)
            {
                if (conditionHanlder(_parentNode))//判断上一级父节点是否符合要求
                {
                    _conditonNode = _parentNode;
                }
                if (_conditonNode == null)//若没有找到符合要求的节点,递归继续
                    _conditonNode = GetParentNode(_parentNode, conditionHanlder);
            }
            return _conditonNode;
        }
        /// 
        /// 向上递归节点
        /// 
        /// 需要向上递归的节点
        /// 委托,返回fasle跳出递归;返回true继续递归;
        public static void UpwardRecursiveNode(this TreeListNode node, Predicate conditionHanlder)
        {
            TreeListNode _parentNode = node.ParentNode;
            if (_parentNode != null)
            {
                if (conditionHanlder(_parentNode))
                {
                    UpwardRecursiveNode(_parentNode, conditionHanlder);
                }
            }
        }
        /// 
        /// 向上递归,获取符合条件的节点的公共父节点
        /// 
        /// 操作节点
        /// 委托
        /// 符合条件的节点
        public static TreeListNode GetPublicParentNode(this TreeListNode node, Predicate checkHanlder)
        {
            TreeListNode _publicPNode = null;
            TreeListNode _findNode = node.GetParentNode(checkHanlder);//先获取到条件判断的自身父节点
            if (_findNode != null)
            {
                //开始向上递归
                UpwardRecursiveNode(_findNode, n =>
                {
                    TreeListNode _curpublicNode = n.ParentNode;//获取当前向上递归的父节点
                    if (_curpublicNode != null)
                    {
                        if (_curpublicNode.Nodes.Count > 1)//若有多个子节点,则是公共父节点
                        {
                            _publicPNode = _curpublicNode;
                            return false;//跳出递归
                        }
                    }
                    return true;//继续递归
                });
            }
            return _publicPNode;
        }
希望有所帮助!

[WinForm][DevExpress][TreeList]向上递归,获取公共父节点,搜素材,soscw.com

[WinForm][DevExpress][TreeList]向上递归,获取公共父节点

标签:des   winform   style   class   blog   code   

原文地址:http://www.cnblogs.com/Yan-Zhiwei/p/3807724.html


评论


亲,登录后才可以留言!