【发布时间】:2015-09-02 07:07:16
【问题描述】:
您好,我目前有一个TreeView,其结构如下:
- 根
-
孩子
- 根
- 儿童
- 根
- 孩子
- 儿童
- RootN
- 孩子N
- 儿童
TreeView 结构基本上可以有 NRootNodes - NChildren 而 NRootNodes 可以有 NRoots 和 NChildren 所以基本上就像 Windows 资源管理器窗口一样。
- 根
我目前的问题是我必须得到所有的父母或根,在这种情况下 Roots / RootN 然后我必须删除他们的所有子节点,在本例中为 Child / ChildN。最后,我必须只有父节点,然后克隆它们,这样我就可以将它们移动到 TreeView 中的不同位置。
RootNodes 有一个独特的 Tag - Folder 而 ChildNodes 有另一个独特的 Tag - Calculations,正如我之前所说,我必须摆脱 Selected 中的所有 Calculations节点,因此只保留该选定节点的结构。
基本上最后我必须有这样的东西:
- 根
- 根
- 根
- 根
- 根
- 根
- 根
- 根
我有一个递归方法可以“扫描” SelectedNode 并获取所有父节点:
public List<TreeNode> CollectParentNodes(TreeNodeCollection parentCollection, List<TreeNode> collectedNodes)
{
foreach (TreeNode node in parentCollection)
{
if (!collectedNodes.Contains(node.Parent))
{
collectedNodes.Add(node.Parent);
parentNodeAdded = true;
}
if (node.Level != 0 && node.Tag.ToString() != Enumerations.NodeType.Calculation.ToString())
collectedNodes.Add(node);
if (node.Nodes.Count > 0)
CollectParentNodes(node.Nodes, collectedNodes);
}
parentNodeAdded = false;
return collectedNodes;
}
最后我有一个包含所有父母的列表,但我面临的问题是父母也包含他们的后代,在这种情况下 计算
我已经搜索了谷歌和 StackOverFlow,但我找不到任何帮助,如果已经回答,我提前致歉。
谢谢。
【问题讨论】:
-
-您的意思是,您只想获取文件夹吗? -结果将是 List ot 树?
-
是的 Reza,我只想获取文件夹,它应该是一个 List
-
据我所知,您需要验证“标签”属性,该项目是“文件夹”还是“计算”。而且因为您希望树具有新结构,您需要复制原始树并从副本中删除子节点“计算”。
-
@BionicCode - 确实如此,但不知何故我无法删除 Childs。我基本上有一个 SelectedNode,其中包含它的所有结构,包括文件夹和子级等。不知何故,我需要遍历该 SelectedNode 并删除所有子级,所以最后我将只有文件夹。
-
所以你的新树从 SelectedNode 开始忽略父树?