黑马程序员技术交流社区

标题: DevExpress实现TreeList父子节点CheckState状态同步的方法 [打印本页]

作者: 陈君    时间: 2014-8-24 19:30
标题: DevExpress实现TreeList父子节点CheckState状态同步的方法
这篇文章主要介绍了DevExpress实现TreeList父子节点CheckState状态同步的方法,需要的朋友可以参考下
本文实例展示了DevExpress实现TreeList父子节点CheckState状态同步的方法,在项目开发中有一定的应用价值,具体实现方法如下:
主要功能代码如下:
  1. /// <summary>
  2. ///同步父子节点勾选状态
  3. ///说明
  4. ///在AfterCheckNode事件中使用代码
  5. ///eg:e.Node.SyncNodeCheckState(e.Node.CheckState);
  6. /// </summary>
  7. /// <param name="node">需要同步的节点</param>
  8. /// <param name="check">节点当前勾选状态</param>
  9. public static void SyncNodeCheckState(this TreeListNode node, CheckState check) { SyncNodeCheckState_Child(node, check); SyncNodeCheckState_Parent(node, check); }

  10. private static void SyncNodeCheckState_Child(TreeListNode node, CheckState check)
  11. {
  12. if (node != null)
  13. {
  14. node.DownRecursiveNode(n => n.CheckState = check);
  15. }
  16. }
  17. private static void SyncNodeCheckState_Parent(TreeListNode node, CheckState check)
  18. {
  19. if (node.ParentNode != null)
  20. {
  21. bool _cked = false;
  22. CheckState _ckState;
  23. foreach (TreeListNode cn in node.ParentNode.Nodes)
  24. {
  25. _ckState = cn.CheckState;
  26. if (check != _ckState)
  27. {
  28. _cked = !_cked;
  29. break;
  30. }
  31. }
  32. node.ParentNode.CheckState = _cked ? CheckState.Indeterminate : check;
  33. SyncNodeCheckState_Parent(node.ParentNode, check);
  34. }
  35. }
  36. /// <summary>
  37. /// 向下递归TreeListNode节点
  38. /// </summary>
  39. /// <param name="node">需要向下递归的节点</param>
  40. /// <param name="conditionHanlder">委托</param>
  41. public static void DownRecursiveNode(this TreeListNode node, Action<TreeListNode> conditionHanlder)
  42. {
  43. foreach (TreeListNode _childNode in node.Nodes)
  44. {
  45. conditionHanlder(_childNode);
  46. DownRecursiveNode(_childNode, conditionHanlder);
  47. }
  48. }
复制代码

代码运行效果如下图所示:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2