DevExpress實(shí)現(xiàn)TreeList向上遞歸獲取公共父節(jié)點(diǎn)的方法
有時(shí)候在進(jìn)行C#項(xiàng)目開(kāi)發(fā)中,需要獲取到公共節(jié)點(diǎn),如下圖所示:
譬如,當(dāng)點(diǎn)擊“Test103-2”節(jié)點(diǎn),其類(lèi)型是“燈”類(lèi)型,那怎么獲取到“中心區(qū)域”這個(gè)類(lèi)型是“地域”的公共節(jié)點(diǎn)?對(duì)此具體實(shí)現(xiàn)方法如下:
主要功能代碼如下:
/// <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)//若沒(méi)有找到符合要求的節(jié)點(diǎn),遞歸繼續(xù) _conditonNode = GetParentNode(_parentNode, conditionHanlder); } return _conditonNode; } /// <summary> /// 向上遞歸節(jié)點(diǎn) /// </summary> /// <param name="node">需要向上遞歸的節(jié)點(diǎn)</param> /// <param name="conditionHanlder">委托,返回fasle跳出遞歸;返回true繼續(xù)遞歸;</param> public static void UpwardRecursiveNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder) { TreeListNode _parentNode = node.ParentNode; if (_parentNode != null) { if (conditionHanlder(_parentNode)) { UpwardRecursiveNode(_parentNode, conditionHanlder); } } } /// <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) { //開(kāi)始向上遞歸 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; }
希望本文所述示例對(duì)大家進(jìn)行類(lèi)似的C#項(xiàng)目開(kāi)發(fā)能有所幫助!
- DevExpress TreeList 常見(jiàn)問(wèn)題解決方法
- DevExpress之TreeList用法實(shí)例總結(jié)
- DevExpress設(shè)置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 簡(jiǎn)介
相關(guān)文章
基于WPF實(shí)現(xiàn)Message消息提醒控件
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)Meesage消息提醒控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2023-07-07C#使用Json.Net進(jìn)行序列化和反序列化及定制化
在本篇文章里小編給大家分享了關(guān)于C#使用Json.Net進(jìn)行序列化和反序列化及定制化的知識(shí)點(diǎn)總結(jié),需要的朋友們參考學(xué)習(xí)下。2019-05-05C#實(shí)現(xiàn)翻轉(zhuǎn)字符串的方法
這篇文章主要介紹了C#實(shí)現(xiàn)翻轉(zhuǎn)字符串的方法,涉及C#操作字符串的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04基于反射解決類(lèi)復(fù)制的實(shí)現(xiàn)方法
本篇文章對(duì)反射解決類(lèi)復(fù)制的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05C# winform打開(kāi)Excel文檔的方法總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇C# winform打開(kāi)Excel文檔的方法總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01C#靜態(tài)構(gòu)造函數(shù)用法實(shí)例分析
這篇文章主要介紹了C#靜態(tài)構(gòu)造函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了C#靜態(tài)構(gòu)造函數(shù)的用途、實(shí)現(xiàn)方法及使用技巧,需要的朋友可以參考下2015-06-06C# Winform下載文件并顯示進(jìn)度條的實(shí)現(xiàn)代碼
本來(lái)是要研究怎樣判斷下載完成,結(jié)果找到這個(gè)方法,可以在這個(gè)方法完成之后提示下載完成,需要的朋友可以參考下2014-07-07