zoukankan      html  css  js  c++  java
  • DevExpress TreeList使用

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Drawing;
      4 using System.Windows.Forms;
      5 using DevExpress.XtraBars;
      6 using DevExpress.XtraTreeList;
      7 using DevExpress.XtraTreeList.Nodes;
      8 
      9 namespace DevExpressUtilHelpV3
     10 {
     11   public static class TreeListToolV3
     12   {
     13     public delegate string BuildPathRule(string nodeText, string fullPathInfo);
     14     /// <summary>
     15     /// 获取选中节点到根节点的所有信息
     16     /// </summary>
     17     /// <param name="focusedNode">TreeListNode</param>
     18     /// <param name="columnID">列名称</param>
     19     /// <param name="buildPathRule">规则委托</param>
     20     /// <returns>路径信息</returns>
     21     public static string FullPathInfo(this TreeListNode focusedNode, string columnID, BuildPathRule buildPathRule)
     22     {
     23       if (focusedNode == null)
     24         throw new ArgumentNullException("focusedNode");
     25       if (string.IsNullOrEmpty("columnID"))
     26         throw new ArgumentNullException("columnID");
     27       string _fullPathInfo = string.Empty;
     28       _fullPathInfo = focusedNode.GetDisplayText(columnID);
     29       while (focusedNode.ParentNode != null)
     30       {
     31         focusedNode = focusedNode.ParentNode;
     32         string _nodeText = focusedNode.GetDisplayText(columnID).Trim();
     33         _fullPathInfo = buildPathRule(_nodeText, _fullPathInfo);
     34       }
     35       return _fullPathInfo;
     36     }
     37     public delegate bool CompareNodeRule(TreeListNode focusedNode);
     38     /// <summary>
     39     /// 获取筛选节点到根节点的所有信息
     40     /// </summary>
     41     /// <param name="focusedNode">TreeListNode</param>
     42     /// <param name="columnID">列名称</param>
     43     /// <param name="compareNodeRule">规则委托</param>
     44     /// <param name="buildPathRule">规则委托</param>
     45     /// <returns>路径信息</returns>
     46     public static string FilterPathInfo(this TreeListNode focusedNode, string columnID, CompareNodeRule compareNodeRule, BuildPathRule buildPathRule)
     47     {
     48       if (focusedNode == null)
     49         throw new ArgumentNullException("focusedNode");
     50       if (string.IsNullOrEmpty("columnID"))
     51         throw new ArgumentNullException("columnID");
     52       string _fullPathInfo = string.Empty;
     53       _fullPathInfo = focusedNode.GetDisplayText(columnID);
     54       while (focusedNode.ParentNode != null)
     55       {
     56         focusedNode = focusedNode.ParentNode;
     57         if (compareNodeRule(focusedNode))
     58         {
     59           string _nodeText = focusedNode.GetDisplayText(columnID).Trim();
     60           _fullPathInfo = buildPathRule(_nodeText, _fullPathInfo);
     61         }
     62       }
     63       return _fullPathInfo;
     64     }
     65     /// <summary>
     66     /// 递归遍历树节点
     67     /// </summary>
     68     /// <param name="tree"></param>
     69     /// <param name="opreateRule"></param>
     70     public static void LoopTree(this TreeList tree, Action<TreeListNode> opreateRule)
     71     {
     72       if (tree == null)
     73         throw new ArgumentNullException("tree");
     74       foreach (TreeListNode node in tree.Nodes)
     75       {
     76         opreateRule(node);
     77         if (node.Nodes.Count > 0)
     78         {
     79           LoopTreeNodes(node, opreateRule);
     80         }
     81       }
     82     }
     83     /// <summary>
     84     /// 递归遍历TreeListNode节点
     85     /// </summary>
     86     /// <param name="node"></param>
     87     /// <param name="opreateRule"></param>
     88     public static void LoopTreeNodes(this TreeListNode node, Action<TreeListNode> opreateRule)
     89     {
     90       if (node == null)
     91         throw new ArgumentNullException("node");
     92       foreach (TreeListNode _childNode in node.Nodes)
     93   {
     94   opreateRule(_childNode);
     95   LoopTreeNodes(_childNode, opreateRule);
     96   }
     97   }
     98 /// <summary>
     99 /// 递归遍历TreeListNode,当opreateRule返回false停止循环
    100 /// </summary>
    101 /// <param name="node">TreeListNode</param>
    102 /// <param name="opreateRule">Func<TreeListNode, bool></param>
    103 public static void LoopTreeNodes_Break(this TreeListNode node, Func<TreeListNode, bool> opreateRule)
    104   {
    105 if (node == null)
    106 throw new ArgumentNullException("node");
    107 foreach (TreeListNode _childNode in node.Nodes)
    108   {
    109 if (!opreateRule(_childNode))
    110 break;
    111   LoopTreeNodes_Break(_childNode, opreateRule);
    112   }
    113   }
    114 /// <summary>
    115 /// 递归遍历TreeListNode,当opreateRule返回false跳出循环,直接进入下次循环
    116 /// </summary>
    117 /// <param name="node">TreeListNode</param>
    118 /// <param name="opreateRule">Func<TreeListNode, bool></param>
    119 public static void LoopTreeNodes_Continue(this TreeListNode node, Func<TreeListNode, bool> opreateRule)
    120   {
    121 if (node == null)
    122 throw new ArgumentNullException("node");
    123 foreach (TreeListNode _childNode in node.Nodes)
    124   {
    125 if (!opreateRule(_childNode))
    126 continue;
    127   LoopTreeNodes_Continue(_childNode, opreateRule);
    128   }
    129   }
    130 public delegate bool CheckNodeRule(TreeListNode fucusedNode);
    131 public delegate void CheckNodeNullRule();
    132 /// <summary>
    133 /// 节点为null检查
    134 /// </summary>
    135 /// <param name="fucusedNode">TreeListNode</param>
    136 /// <param name="checkNodeRule">若为NULL,处理逻辑</param>
    137 /// <returns>TreeListNode</returns>
    138 public static TreeListNode CheckNull(this TreeListNode fucusedNode, CheckNodeNullRule checkNodeRule)
    139   {
    140 if (fucusedNode == null)
    141   {
    142   checkNodeRule();
    143 return null;
    144   }
    145 return fucusedNode;
    146   }
    147 /// <summary>
    148 /// 正对节点的检查逻辑
    149 /// </summary>
    150 /// <param name="fucusedNode">TreeListNode</param>
    151 /// <param name="checkNodeRule">检查逻辑代码[委托]</param>
    152 /// <returns>TreeListNode</returns>
    153 public static TreeListNode Check(this TreeListNode fucusedNode, CheckNodeRule checkNodeRule)
    154   {
    155 if (fucusedNode != null)
    156 return checkNodeRule(fucusedNode) == true ? fucusedNode : null;
    157 return null;
    158   }
    159 /// <summary>
    160 /// 水平滚动条
    161 /// </summary>
    162 /// <param name="tree">TreeList</param>
    163 public static void HorzScroll(this TreeList tree)
    164   {
    165 if (tree == null)
    166 throw new ArgumentNullException("tree");
    167   tree.OptionsView.AutoWidth = false;
    168   tree.BestFitColumns();
    169   tree.HorzScrollVisibility = ScrollVisibility.Always;
    170   }
    171 /// <summary>
    172 /// 为TreeList附加右键菜单
    173 /// MouseUp(object sender, MouseEventArgs e)事件中调用
    174 /// </summary>
    175 /// <param name="tree">TreeList</param>
    176 /// <param name="e">MouseEventArgs</param>
    177 /// <param name="menu">PopupMenu</param>
    178 /// <param name="attachMenuRule">AttachMenuRule</param>
    179 public static void AttachMenu(this TreeList tree, MouseEventArgs e, PopupMenu menu, Func<TreeListNode, bool> attachMenuRule)
    180   {
    181 if (tree == null)
    182 throw new ArgumentNullException("tree");
    183 if (menu == null)
    184 throw new ArgumentNullException("menu");
    185 if (e.Button == MouseButtons.Right && Control.ModifierKeys == Keys.None && tree.State == TreeListState.Regular)
    186   {
    187   Point _point = new Point(Cursor.Position.X, Cursor.Position.Y);
    188   TreeListHitInfo _hitInfo = tree.CalcHitInfo(e.Location);
    189 if (_hitInfo.HitInfoType == HitInfoType.Cell)
    190   tree.SetFocusedNode(_hitInfo.Node);
    191 if (attachMenuRule(tree.FocusedNode))
    192   menu.ShowPopup(_point);
    193   }
    194   }
    195 /// <summary>
    196 /// 设置父节点的状态AfterCheckNode(object sender, NodeEventArgs e)
    197 /// </summary>
    198 /// <param name="node"></param>
    199 /// <param name="check"></param>
    200 public static void ProcessNodeCheckState(this TreeListNode node, CheckState check)
    201   {
    202 if (node == null)
    203 throw new ArgumentNullException("node");
    204   SetCheckedChildNodes(node, check);
    205   SetCheckedParentNodes(node, check);
    206   }
    207 /// <summary>
    208 /// 设置子节点CheckState
    209 /// </summary>
    210 /// <param name="node"></param>
    211 /// <param name="check"></param>
    212 private static void SetCheckedChildNodes(TreeListNode node, CheckState check)
    213   {
    214 if (node != null)
    215   {
    216   node.LoopTreeNodes((TreeListNode _node) =>
    217   {
    218   _node.CheckState = check;
    219   });
    220   }
    221   }
    222 /// <summary>
    223 /// 设置父节点CheckState
    224 /// </summary>
    225 /// <param name="node"></param>
    226 /// <param name="check"></param>
    227 private static void SetCheckedParentNodes(TreeListNode node, CheckState check)
    228   {
    229 if (node.ParentNode != null)
    230   {
    231 bool _checkStatus = false;
    232   CheckState _nodeState;
    233   node.LoopTreeNodes_Break((TreeListNode _node) =>
    234   {
    235   _nodeState = _node.CheckState;
    236 if (!check.Equals(_nodeState))
    237   {
    238   _checkStatus = !_checkStatus;
    239 return false;//跳出循环
    240   }
    241 return true;//继续循环
    242   });
    243   node.ParentNode.CheckState = _checkStatus ? CheckState.Indeterminate : check;
    244   SetCheckedParentNodes(node.ParentNode, check);
    245   }
    246   }
    247 /// <summary>
    248 /// 根据CheckState获取TreeListNode
    249 /// </summary>
    250 /// <param name="tree">TreeList</param>
    251 /// <param name="state">CheckState</param>
    252 /// <param name="GetNodesByStateRule">返回True的时候继续</param>
    253 /// <returns>TreeListNode集合</returns>
    254 public static List<TreeListNode> GetNodesByState(this TreeList tree, CheckState state, Func<TreeListNode, bool> GetNodesByStateRule)
    255   {
    256 if (tree == null)
    257 throw new ArgumentNullException("tree");
    258   List<TreeListNode> _checkNodes = new List<TreeListNode>();
    259   tree.LoopTree((TreeListNode node) =>
    260   {
    261 if (GetNodesByStateRule(node))
    262   {
    263 if (node.CheckState == state)
    264   _checkNodes.Add(node);
    265   }
    266   });
    267 return _checkNodes;
    268   }
    269   }
    270 }
  • 相关阅读:
    JavaScript中函数和构造函数的区别
    如何使用less(变量,混合,匹配,运算,嵌套...)
    sublime text3 最常用的快捷键及插件
    ReentrantLock实现原理
    揭密FutureTask
    消息队列设计精要(转)
    漫谈MySql中的事务
    浅析Spring AOP
    理解java动态代理
    理解tomcat之搭建简易http服务器
  • 原文地址:https://www.cnblogs.com/endv/p/4585166.html
Copyright © 2011-2022 走看看