DevExpress實現TreeList節(jié)點互斥的方法
本文實例講述了DevExpress實現TreeList節(jié)點互斥的方法,具體實現方法如下所示:
主要功能代碼如下:
/// <summary> /// 節(jié)點互斥同步 /// 說明 /// eg: ///TreeListNode _node = e.Node; ///_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab); /// </summary> /// <param name="node">需要互斥同步的節(jié)點</param> /// <param name="checkState">節(jié)點狀態(tài)</param> /// <param name="checkHanlder">互斥條件【委托】</param> public static void SyncMutexNodeCheckState(this TreeListNode node, CheckState checkState, Predicate<TreeListNode> checkHanlder) { TreeList _tree = node.TreeList; if (checkHanlder(node))//當前節(jié)點符合互斥條件時候 { _tree.DownRecursiveTree(n => n.CheckState = CheckState.Unchecked); } else { TreeListNode _curParentNode = node.GetParentNode(checkHanlder);//獲取符合互斥條件的父節(jié)點 if (_curParentNode == null) return; TreeListNode _thePubleNode = node.GetPublicParentNode(checkHanlder);//獲取符合互斥條件的公共父節(jié)點 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> /// 向上遞歸,獲取符合條件的節(jié)點的公共父節(jié)點 /// </summary> /// <param name="node">操作節(jié)點</param> /// <param name="checkHanlder">委托</param> /// <returns>符合條件的節(jié)點</returns> public static TreeListNode GetPublicParentNode(this TreeListNode node, Predicate<TreeListNode> checkHanlder) { TreeListNode _publicPNode = null; TreeListNode _findNode = node.GetParentNode(checkHanlder);//先獲取到條件判斷的自身父節(jié)點 if (_findNode != null) { //開始向上遞歸 UpwardRecursiveNode(_findNode, n => { TreeListNode _curpublicNode = n.ParentNode;//獲取當前向上遞歸的父節(jié)點 if (_curpublicNode != null) { if (_curpublicNode.Nodes.Count > 1)//若有多個子節(jié)點,則是公共父節(jié)點 { _publicPNode = _curpublicNode; return false;//跳出遞歸 } } return true;//繼續(xù)遞歸 }); } return _publicPNode; } /// <summary> /// 向上遞歸,獲取符合條件的父節(jié)點 /// </summary> /// <param name="node">需要向上遞歸的節(jié)點</param> /// <param name="conditionHanlder">判斷條件【委托】</param> /// <returns>符合條件的節(jié)點【TreeListNode】</returns> public static TreeListNode GetParentNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder) { TreeListNode _parentNode = node.ParentNode;//獲取上一級父節(jié)點 TreeListNode _conditonNode = null; if (_parentNode != null) { if (conditionHanlder(_parentNode))//判斷上一級父節(jié)點是否符合要求 { _conditonNode = _parentNode; } if (_conditonNode == null)//若沒有找到符合要求的節(jié)點,遞歸繼續(xù) _conditonNode = GetParentNode(_parentNode, conditionHanlder); } return _conditonNode; }
SyncNodeCheckState代碼可以參考:http://www.dbjr.com.cn/article/53335.htm
說明:
如上圖所示,節(jié)點“Test3”和“蒙自路Test2”都是"cab"類型;
當調用代碼如下:
TreeListNode _node = e.Node; _node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab);
實現的效果就是要么只能勾選“Test3”或者“蒙自路Test2”節(jié)點或者子節(jié)點,不同同時勾選,應該就是互斥的意思;也是這段代碼想實現的效果,希望對大家的項目開發(fā)有所幫助。
- DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現方法
- DevExpress之TreeList用法實例總結
- DevExpress實現自定義TreeListNode的Tooltip的方法
- DevExpress設置TreeList圖片節(jié)點背景色的方法
- DevExpress實現TreeList向上遞歸獲取公共父節(jié)點的方法
- DevExpress實現TreeList父子節(jié)點CheckState狀態(tài)同步的方法
- DevExpress實現TreeList按條件隱藏節(jié)點CheckBox的方法
- DevExpress實現禁用TreeListNode CheckBox的方法
- DevExpress TreeList 常見問題解決方法
相關文章
C# Dynamic關鍵字之:解析dynamic就是Object
本篇文章是對C#中dynamic關鍵字就是Object進行了詳細的分析介紹,需要的朋友參考下2013-05-05C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應用(上)
本篇文章對C#中ExpandoObject,DynamicObject,DynamicMetaOb的應用進行了詳細的分析介紹,需要的朋友參考下2013-05-05C#集合Collections購物車Shopping Cart(實例講解)
下面小編就為大家分享一篇C#集合Collections購物車Shopping Cart的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12