A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这篇文章主要介绍了DevExpress实现TreeList向上递归获取公共父节点的方法,需要的朋友可以参考下
有时候在进行C#项目开发中,需要获取到公共节点,如下图所示:
譬如,当点击“Test103-2”节点,其类型是“灯”类型,那怎么获取到“中心区域”这个类型是“地域”的公共节点?对此具体实现方法如下:
主要功能代码如下:
  1. /// <summary>
  2. /// 向上递归,获取符合条件的父节点
  3. /// </summary>
  4. /// <param name="node">需要向上递归的节点</param>
  5. /// <param name="conditionHanlder">判断条件【委托】</param>
  6. /// <returns>符合条件的节点【TreeListNode】</returns>
  7. public static TreeListNode GetParentNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder)
  8. {
  9. TreeListNode _parentNode = node.ParentNode;//获取上一级父节点
  10. TreeListNode _conditonNode = null;
  11. if (_parentNode != null)
  12. {
  13. if (conditionHanlder(_parentNode))//判断上一级父节点是否符合要求
  14. {
  15. _conditonNode = _parentNode;
  16. }
  17. if (_conditonNode == null)//若没有找到符合要求的节点,递归继续
  18. _conditonNode = GetParentNode(_parentNode, conditionHanlder);
  19. }
  20. return _conditonNode;
  21. }
  22. /// <summary>
  23. /// 向上递归节点
  24. /// </summary>
  25. /// <param name="node">需要向上递归的节点</param>
  26. /// <param name="conditionHanlder">委托,返回fasle跳出递归;返回true继续递归;</param>
  27. public static void UpwardRecursiveNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder)
  28. {
  29. TreeListNode _parentNode = node.ParentNode;
  30. if (_parentNode != null)
  31. {
  32. if (conditionHanlder(_parentNode))
  33. {
  34. UpwardRecursiveNode(_parentNode, conditionHanlder);
  35. }
  36. }
  37. }
  38. /// <summary>
  39. /// 向上递归,获取符合条件的节点的公共父节点
  40. /// </summary>
  41. /// <param name="node">操作节点</param>
  42. /// <param name="checkHanlder">委托</param>
  43. /// <returns>符合条件的节点</returns>
  44. public static TreeListNode
  45. GetPublicParentNode

  46. (this TreeListNode node, Predicate<TreeListNode> checkHanlder)
  47. {
  48. TreeListNode _publicPNode = null;
  49. TreeListNode _findNode = node.GetParentNode(checkHanlder);//先获取到条件判断的自身父节点
  50. if (_findNode != null)
  51. {
  52. //开始向上递归
  53. UpwardRecursiveNode(_findNode, n =>
  54. {
  55. TreeListNode _curpublicNode = n.ParentNode;//获取当前向上递归的父节点
  56. if (_curpublicNode != null)
  57. {
  58. if (_curpublicNode.Nodes.Count > 1)//若有多个子节点,则是公共父节点
  59. {
  60. _publicPNode = _curpublicNode;
  61. return false;//跳出递归
  62. }
  63. }
  64. return true;//继续递归
  65. });
  66. }
  67. return _publicPNode;
  68. }
复制代码

希望本文所述示例对大家进行类似的C#项目开发能有所帮助!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马