DevExpress实现TreeList向上递归获取公共父节点的方法
程序员文章站
2023-12-18 11:33:16
有时候在进行c#项目开发中,需要获取到公共节点,如下图所示:
譬如,当点击“test103-2”节点,其类型是“灯”类型,那怎么获取到“中心区域”这个类型是“地域”的...
有时候在进行c#项目开发中,需要获取到公共节点,如下图所示:
譬如,当点击“test103-2”节点,其类型是“灯”类型,那怎么获取到“中心区域”这个类型是“地域”的公共节点?对此具体实现方法如下:
主要功能代码如下:
/// <summary> /// 向上递归,获取符合条件的父节点 /// </summary> /// <param name="node">需要向上递归的节点</param> /// <param name="conditionhanlder">判断条件【委托】</param> /// <returns>符合条件的节点【treelistnode】</returns> public static treelistnode getparentnode(this treelistnode node, predicate<treelistnode> 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; } /// <summary> /// 向上递归节点 /// </summary> /// <param name="node">需要向上递归的节点</param> /// <param name="conditionhanlder">委托,返回fasle跳出递归;返回true继续递归;</param> public static void upwardrecursivenode(this treelistnode node, predicate<treelistnode> conditionhanlder) { treelistnode _parentnode = node.parentnode; if (_parentnode != null) { if (conditionhanlder(_parentnode)) { upwardrecursivenode(_parentnode, conditionhanlder); } } } /// <summary> /// 向上递归,获取符合条件的节点的公共父节点 /// </summary> /// <param name="node">操作节点</param> /// <param name="checkhanlder">委托</param> /// <returns>符合条件的节点</returns> public static treelistnode getpublicparentnode (this treelistnode node, predicate<treelistnode> 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; }
希望本文所述示例对大家进行类似的c#项目开发能有所帮助!