首页 > 编程 > C# > 正文

DevExpress实现TreeList向上递归获取公共父节点的方法

2020-01-24 02:34:50
字体:
来源:转载
供稿:网友

有时候在进行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#项目开发能有所帮助!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表