【问题标题】:Use where clause on TreeView Node在 TreeView 节点上使用 where 子句
【发布时间】:2018-07-20 17:17:59
【问题描述】:

我有一个 TreeView,我可以像这样选择节点:

           var Key= long.Parse(currentRow.Cells["Key"].Value.ToString());

            var currentNode =  tvProjectList.Nodes[0];
            currentNode.ExpandAll();
            var selectedNode = currentNode.FirstNode.LastNode.LastNode;

如您所见,我只选择最后一个节点,但我不想只选择最后一个节点我想选择Tag 等于我的变量Key 的节点

类似这样的:

 var selectedNode = currentNode.FirstNode.LastNode.Tag.Where(x => x.Tag == Key);

但我不能在节点中使用 Where 子句。

上面写着:

'object' 不包含 'Where' 的定义并且没有扩展名 接受“object”类型的第一个参数的方法“Where”可以是 找到(您是否缺少 using 指令或程序集引用?)

我怎样才能实现我想要的?

【问题讨论】:

  • 你用的是什么树控件?
  • CellClick @TerryCarmen
  • CellClick 不是控件。您使用的是 Microsoft TreeView、Infragistics 还是其他?
  • 我正在使用 Microsoft TreeView @TerryCarmen

标签: c# winforms treeview


【解决方案1】:

如果您已经分配了唯一键并希望通过键查找节点,那么您只需要:

mytree.Nodes[0].Find("key_i_am_looking_for",1);

但这显然与您所寻找的相反。如果你真的需要根据标签值来查找节点,你唯一的解决办法就是从根节点开始,递归地检查每个节点,直到找到你想要的标签。

private void RecursiveSearch(TreeNode treeNode)  
{            
   foreach (TreeNode tn in treeNode.Nodes)  
   {     
     TreeNodeCollection nodes = treeView.Nodes;         
         foreach (TreeNode n in nodes)  
         {  
            if(n.tag.toString().Equals("what you want"))
                 break;
            else                 
                 RecursiveSearch(n);  
         }  
   }  

}

【讨论】:

  • 为什么我只有 1 个节点进入 `var currentNode = tvProjectList.Nodes[0]` 但在里面我还有 3 个像我的其他变量一样:var selectedNode = currentNode.FirstNode.LastNode.LastNode; 还有 3 个 lastNode 我怎么能将该节点访问到 foreach 中?
  • 上面的例子在找到第一个匹配项时停止,但是您可以删除“break;”并做其他事情(将您的结果添加到列表中,打印一些东西等)。它会处理所有的节点。
猜你喜欢
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多