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

DevExpress實(shí)現(xiàn)TreeList節(jié)點(diǎn)互斥的方法

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

本文實(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ā)有所幫助。

相關(guān)文章

最新評(píng)論