国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

DevExpress實現TreeList節點互斥的方法

2020-01-24 02:34:50
字體:
來源:轉載
供稿:網友

本文實例講述了DevExpress實現TreeList節點互斥的方法,具體實現方法如下所示:

主要功能代碼如下:

/// <summary>/// 節點互斥同步/// 說明/// eg:///TreeListNode _node = e.Node;///_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab);/// </summary>/// <param name="node">需要互斥同步的節點</param>/// <param name="checkState">節點狀態</param>/// <param name="checkHanlder">互斥條件【委托】</param>public static void SyncMutexNodeCheckState(this TreeListNode node, CheckState checkState, Predicate<TreeListNode> checkHanlder){  TreeList _tree = node.TreeList;  if (checkHanlder(node))//當前節點符合互斥條件時候  { _tree.DownRecursiveTree(n => n.CheckState = CheckState.Unchecked);  }  else  { TreeListNode _curParentNode = node.GetParentNode(checkHanlder);//獲取符合互斥條件的父節點 if (_curParentNode == null) return; TreeListNode _thePubleNode = node.GetPublicParentNode(checkHanlder);//獲取符合互斥條件的公共父節點 if (_thePubleNode == null) return; foreach (TreeListNode n in _thePubleNode.Nodes) {   foreach (TreeListNode nc in n.Nodes)   { if (nc != _curParentNode) {   nc.CheckState = CheckState.Unchecked;   nc.DownRecursiveNode(nr => nr.CheckState = CheckState.Unchecked); }   } }  }  node.SyncNodeCheckState(checkState);  node.CheckState = checkState;}}/// <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;}/// <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;}

SyncNodeCheckState代碼可以參考://m.survivalescaperooms.com/article/53335.htm

說明:

如上圖所示,節點“Test3”和“蒙自路Test2”都是"cab"類型;
當調用代碼如下:

TreeListNode _node = e.Node;_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab);

實現的效果就是要么只能勾選“Test3”或者“蒙自路Test2”節點或者子節點,不同同時勾選,應該就是互斥的意思;也是這段代碼想實現的效果,希望對大家的項目開發有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青岛市| 芜湖县| 宁强县| 通榆县| 财经| 福泉市| 岑巩县| 崇州市| 安阳市| 江阴市| 南涧| 克山县| 香河县| 延津县| 稻城县| 西乌| 庆安县| 秦安县| 乌拉特前旗| 湾仔区| 万全县| 绍兴县| 唐河县| 汤原县| 洛浦县| 娱乐| 灌阳县| 德州市| 漾濞| 万年县| 湟源县| 当涂县| 稻城县| 张北县| 临邑县| 望江县| 布尔津县| 织金县| 秭归县| 南平市| 金坛市|