DevExpress實(shí)現(xiàn)TreeList節(jié)點(diǎn)互斥的方法
本文實(shí)例講述了DevExpress實(shí)現(xiàn)TreeList節(jié)點(diǎn)互斥的方法,具體實(shí)現(xiàn)方法如下所示:
主要功能代碼如下:
/// <summary> /// 節(jié)點(diǎn)互斥同步 /// 說明 /// eg: ///TreeListNode _node = e.Node; ///_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab); /// </summary> /// <param name="node">需要互斥同步的節(jié)點(diǎn)</param> /// <param name="checkState">節(jié)點(diǎn)狀態(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))//當(dāng)前節(jié)點(diǎn)符合互斥條件時(shí)候 { _tree.DownRecursiveTree(n => n.CheckState = CheckState.Unchecked); } else { TreeListNode _curParentNode = node.GetParentNode(checkHanlder);//獲取符合互斥條件的父節(jié)點(diǎn) if (_curParentNode == null) return; TreeListNode _thePubleNode = node.GetPublicParentNode(checkHanlder);//獲取符合互斥條件的公共父節(jié)點(diǎn) 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é)點(diǎn)的公共父節(jié)點(diǎn) /// </summary> /// <param name="node">操作節(jié)點(diǎn)</param> /// <param name="checkHanlder">委托</param> /// <returns>符合條件的節(jié)點(diǎn)</returns> public static TreeListNode GetPublicParentNode(this TreeListNode node, Predicate<TreeListNode> checkHanlder) { TreeListNode _publicPNode = null; TreeListNode _findNode = node.GetParentNode(checkHanlder);//先獲取到條件判斷的自身父節(jié)點(diǎn) if (_findNode != null) { //開始向上遞歸 UpwardRecursiveNode(_findNode, n => { TreeListNode _curpublicNode = n.ParentNode;//獲取當(dāng)前向上遞歸的父節(jié)點(diǎn) if (_curpublicNode != null) { if (_curpublicNode.Nodes.Count > 1)//若有多個(gè)子節(jié)點(diǎn),則是公共父節(jié)點(diǎn) { _publicPNode = _curpublicNode; return false;//跳出遞歸 } } return true;//繼續(xù)遞歸 }); } return _publicPNode; } /// <summary> /// 向上遞歸,獲取符合條件的父節(jié)點(diǎn) /// </summary> /// <param name="node">需要向上遞歸的節(jié)點(diǎn)</param> /// <param name="conditionHanlder">判斷條件【委托】</param> /// <returns>符合條件的節(jié)點(diǎn)【TreeListNode】</returns> public static TreeListNode GetParentNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder) { TreeListNode _parentNode = node.ParentNode;//獲取上一級(jí)父節(jié)點(diǎn) TreeListNode _conditonNode = null; if (_parentNode != null) { if (conditionHanlder(_parentNode))//判斷上一級(jí)父節(jié)點(diǎn)是否符合要求 { _conditonNode = _parentNode; } if (_conditonNode == null)//若沒有找到符合要求的節(jié)點(diǎn),遞歸繼續(xù) _conditonNode = GetParentNode(_parentNode, conditionHanlder); } return _conditonNode; }
SyncNodeCheckState代碼可以參考:http://www.dbjr.com.cn/article/53335.htm
說明:
如上圖所示,節(jié)點(diǎn)“Test3”和“蒙自路Test2”都是"cab"類型;
當(dāng)調(diào)用代碼如下:
TreeListNode _node = e.Node; _node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab);
實(shí)現(xiàn)的效果就是要么只能勾選“Test3”或者“蒙自路Test2”節(jié)點(diǎn)或者子節(jié)點(diǎn),不同同時(shí)勾選,應(yīng)該就是互斥的意思;也是這段代碼想實(shí)現(xiàn)的效果,希望對(duì)大家的項(xiàng)目開發(fā)有所幫助。
- DevExpress獲取TreeList可視區(qū)域節(jié)點(diǎn)集合的實(shí)現(xiàn)方法
- DevExpress之TreeList用法實(shí)例總結(jié)
- DevExpress實(shí)現(xiàn)自定義TreeListNode的Tooltip的方法
- DevExpress設(shè)置TreeList圖片節(jié)點(diǎn)背景色的方法
- DevExpress實(shí)現(xiàn)TreeList向上遞歸獲取公共父節(jié)點(diǎn)的方法
- DevExpress實(shí)現(xiàn)TreeList父子節(jié)點(diǎn)CheckState狀態(tài)同步的方法
- DevExpress實(shí)現(xiàn)TreeList按條件隱藏節(jié)點(diǎn)CheckBox的方法
- DevExpress實(shí)現(xiàn)禁用TreeListNode CheckBox的方法
- DevExpress TreeList 常見問題解決方法
相關(guān)文章
WPF使用DrawingContext實(shí)現(xiàn)繪制刻度條
這篇文章主要為大家詳細(xì)介紹了如何利用WPF DrawingContext實(shí)現(xiàn)繪制刻度條,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09C#實(shí)現(xiàn)Winform動(dòng)態(tài)添加菜單的方法
這篇文章主要介紹了C#實(shí)現(xiàn)Winform動(dòng)態(tài)添加菜單的方法,涉及C#操作菜單的技巧,需要的朋友可以參考下2015-05-05C# Dynamic關(guān)鍵字之:解析dynamic就是Object
本篇文章是對(duì)C#中dynamic關(guān)鍵字就是Object進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05詳解C#如何在不同工作簿之間復(fù)制選定單元格區(qū)域
處理Excel文檔時(shí),我們經(jīng)常需要將數(shù)據(jù)整合到一個(gè)工作表以便于我們進(jìn)行管理或數(shù)據(jù)對(duì)比。本文將演示如何通過編程方式將選定的單元格區(qū)域從一個(gè)工作簿復(fù)制到另一個(gè)工作簿2023-02-02C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用(上)
本篇文章對(duì)C#中ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#集合Collections購物車Shopping Cart(實(shí)例講解)
下面小編就為大家分享一篇C#集合Collections購物車Shopping Cart的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12