DevExpress實(shí)現(xiàn)TreeList向上遞歸獲取公共父節(jié)點(diǎn)的方法
有時(shí)候在進(jìn)行C#項(xiàng)目開發(fā)中,需要獲取到公共節(jié)點(diǎn),如下圖所示:

譬如,當(dāng)點(diǎn)擊“Test103-2”節(jié)點(diǎn),其類型是“燈”類型,那怎么獲取到“中心區(qū)域”這個(gè)類型是“地域”的公共節(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)//若沒有找到符合要求的節(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)
{
//開始向上遞歸
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)行類似的C#項(xiàng)目開發(fā)能有所幫助!
- DevExpress TreeList 常見問題解決方法
- 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 簡介
相關(guān)文章
WPF/Silverlight實(shí)現(xiàn)圖片局部放大的方法分析
這篇文章主要介紹了WPF/Silverlight實(shí)現(xiàn)圖片局部放大的方法,結(jié)合實(shí)例形式分析了WPF/Silverlight針對(duì)圖片屬性操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03
Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法
游戲中收到傷害掉血,會(huì)有飄動(dòng)的傷害數(shù)值,本文主要介紹Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
C#程序(含多個(gè)Dll)合并成一個(gè)Exe的簡單方法
這篇文章主要為大家詳細(xì)介紹了C#程序(含多個(gè)Dll)合并成一個(gè)Exe的簡單方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
C#使用DateTime.Now靜態(tài)屬性動(dòng)態(tài)獲得系統(tǒng)當(dāng)前日期和時(shí)間
本文主要介紹了C#使用DateTime.Now靜態(tài)屬性動(dòng)態(tài)獲得系統(tǒng)當(dāng)前日期和時(shí)間,DateTime結(jié)構(gòu)的Now靜態(tài)屬性只是得到一個(gè)系統(tǒng)時(shí)間對(duì)象,該時(shí)間對(duì)象不會(huì)隨著系統(tǒng)時(shí)間的變化而變化,如果要?jiǎng)討B(tài)顯示系統(tǒng)時(shí)間,可以使用計(jì)時(shí)器間隔地獲取系統(tǒng)時(shí)間對(duì)象并顯示,感興趣的可以了解一下2024-01-01
C#集合根據(jù)對(duì)象的某個(gè)屬性進(jìn)行去重的代碼示例
當(dāng)根據(jù)對(duì)象的Name屬性進(jìn)行去重時(shí),你可以使用以下三種方法:使用Distinct方法和自定義比較器、使用LINQ的GroupBy方法,以及使用HashSet,下面給大家介紹C#集合根據(jù)對(duì)象的某個(gè)屬性進(jìn)行去重的代碼示例,感興趣的朋友一起看看吧2024-03-03

