欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

DevExpress實現TreeList節(jié)點互斥的方法

 更新時間:2014年08月06日 16:57:48   投稿:shichen2014  
這篇文章主要介紹了DevExpress實現TreeList節(jié)點互斥的方法,對于初學者更好的理解C#有一定的幫助,需要的朋友可以參考下

本文實例講述了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ā)有所幫助。

相關文章

最新評論