DevExpress實現(xiàn)TreeList節(jié)點互斥的方法
本文實例講述了DevExpress實現(xiàn)TreeList節(jié)點互斥的方法,具體實現(xiàn)方法如下所示:
主要功能代碼如下:
/// <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))//當(dāng)前節(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;//獲取當(dāng)前向上遞歸的父節(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"類型;
當(dāng)調(diào)用代碼如下:
TreeListNode _node = e.Node; _node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab);
實現(xiàn)的效果就是要么只能勾選“Test3”或者“蒙自路Test2”節(jié)點或者子節(jié)點,不同同時勾選,應(yīng)該就是互斥的意思;也是這段代碼想實現(xiàn)的效果,希望對大家的項目開發(fā)有所幫助。
- DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法
- DevExpress之TreeList用法實例總結(jié)
- DevExpress實現(xiàn)自定義TreeListNode的Tooltip的方法
- DevExpress設(shè)置TreeList圖片節(jié)點背景色的方法
- DevExpress實現(xiàn)TreeList向上遞歸獲取公共父節(jié)點的方法
- DevExpress實現(xiàn)TreeList父子節(jié)點CheckState狀態(tài)同步的方法
- DevExpress實現(xiàn)TreeList按條件隱藏節(jié)點CheckBox的方法
- DevExpress實現(xiàn)禁用TreeListNode CheckBox的方法
- DevExpress TreeList 常見問題解決方法
相關(guān)文章
WPF使用DrawingContext實現(xiàn)繪制刻度條
這篇文章主要為大家詳細(xì)介紹了如何利用WPF DrawingContext實現(xiàn)繪制刻度條,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09
C#實現(xiàn)Winform動態(tài)添加菜單的方法
這篇文章主要介紹了C#實現(xiàn)Winform動態(tài)添加菜單的方法,涉及C#操作菜單的技巧,需要的朋友可以參考下2015-05-05
C# Dynamic關(guān)鍵字之:解析dynamic就是Object
本篇文章是對C#中dynamic關(guān)鍵字就是Object進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
詳解C#如何在不同工作簿之間復(fù)制選定單元格區(qū)域
處理Excel文檔時,我們經(jīng)常需要將數(shù)據(jù)整合到一個工作表以便于我們進行管理或數(shù)據(jù)對比。本文將演示如何通過編程方式將選定的單元格區(qū)域從一個工作簿復(fù)制到另一個工作簿2023-02-02
C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用(上)
本篇文章對C#中ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C#集合Collections購物車Shopping Cart(實例講解)
下面小編就為大家分享一篇C#集合Collections購物車Shopping Cart的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12

