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

 更新时间:2014年08月06日 17:14:44   投稿:shichen2014  
这篇文章主要介绍了DevExpress实现TreeList向上递归获取公共父节点的方法,需要的朋友可以参考下

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

相关文章

  • WPF/Silverlight实现图片局部放大的方法分析

    WPF/Silverlight实现图片局部放大的方法分析

    这篇文章主要介绍了WPF/Silverlight实现图片局部放大的方法,结合实例形式分析了WPF/Silverlight针对图片属性操作相关实现技巧,需要的朋友可以参考下
    2017-03-03
  • C# 值类型的实现

    C# 值类型的实现

    本文主要介绍了C# 值类型的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Unity实现游戏伤害数字显示HUD的方法

    Unity实现游戏伤害数字显示HUD的方法

    游戏中收到伤害掉血,会有飘动的伤害数值,本文主要介绍Unity实现游戏伤害数字显示HUD的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C#程序(含多个Dll)合并成一个Exe的简单方法

    C#程序(含多个Dll)合并成一个Exe的简单方法

    这篇文章主要为大家详细介绍了C#程序(含多个Dll)合并成一个Exe的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧...
    2007-04-04
  • 浅析WPF中Popup弹出层的使用

    浅析WPF中Popup弹出层的使用

    这篇文章将通过一个简单的小例子,为大家详细介绍一下如何在WPF开发中,通过Popup实现鼠标点击弹出浮动停靠窗口,有需要的小伙伴可以了解下
    2024-01-01
  • 浅谈C# 构造方法(函数)

    浅谈C# 构造方法(函数)

    这篇文章主要介绍了C# 构造方法(函数)的的相关资料,文中讲解非常详细,帮助大家更好的学习C#,感兴趣的朋友可以了解下
    2020-06-06
  • c#源码的执行过程详解

    c#源码的执行过程详解

    在本篇文章中给大家详细讲述了c#源码的执行过程,对此有需要的朋友们可以学习下。
    2018-07-07
  • C#使用DateTime.Now静态属性动态获得系统当前日期和时间

    C#使用DateTime.Now静态属性动态获得系统当前日期和时间

    本文主要介绍了C#使用DateTime.Now静态属性动态获得系统当前日期和时间,DateTime结构的Now静态属性只是得到一个系统时间对象,该时间对象不会随着系统时间的变化而变化,如果要动态显示系统时间,可以使用计时器间隔地获取系统时间对象并显示,感兴趣的可以了解一下
    2024-01-01
  • C#集合根据对象的某个属性进行去重的代码示例

    C#集合根据对象的某个属性进行去重的代码示例

    当根据对象的Name属性进行去重时,你可以使用以下三种方法:使用Distinct方法和自定义比较器、使用LINQ的GroupBy方法,以及使用HashSet,下面给大家介绍C#集合根据对象的某个属性进行去重的代码示例,感兴趣的朋友一起看看吧
    2024-03-03

最新评论