当前位置: 移动技术网 > IT编程>开发语言>c# > DevExpress实现TreeList向上递归获取公共父节点的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网