【问题标题】:C# Populate TreeView Recursively Stack OverflowC# 递归填充 TreeView 堆栈溢出
【发布时间】:2011-11-11 16:18:23
【问题描述】:

哇哦!我要发布一个关于堆栈溢出的问题...关于 stackoverflow :)

所以可能只是现在是星期五,我的大脑已经炸了,但我正在尝试编写一个类,该类使用从 TreeNode 继承的通用类型对象和一个简单的接口递归填充给定的 TreeView。

由于某种原因,我在尝试填充节点时遇到了 stackoverflow 异常。

我的简单界面:

public interface ITreeNode
{
    int ItemID { get; set; }
    int ParentID { get; set; }
}

递归代码:

public void SetNodes(int rootId)
{
    foreach (T root in _nodeList.Where(i => i.ParentID == rootId))
    {
        _tree.Nodes.Add(root);
        addBrowserItems(root);
    }
}

private void addBrowserItems(T parentNode)
{
    foreach (T child in _nodeList.Where(i => i.ParentID == parentNode.ItemID))
    {
        parentNode.Nodes.Add(child);
        addBrowserItems(child);
    }
}

【问题讨论】:

  • @Aliostad - 让我想起了评论中的一首歌。
  • 代码对我来说看起来不错。您是否已介入以确保您的数据正常?
  • 当您的_nodeList 包含循环时,您的堆栈溢出。
  • @Adam 如果我延迟加载数据,它工作得很好
  • Ohhhh - @Henk 搞定了。你的树有一个循环。循环引用。节点 X 有一个父节点,它有一个父节点,它的父节点是 X。或者是一些类似的令人费解的边缘情况,它已经潜入你的数据中。

标签: c# recursion treeview stack-overflow


【解决方案1】:

好的,所以 Henk 明白了,有一个循环。

我有 2 个单独的表格,其中包含填充树视图的文件夹项目和报告项目 - 我在两者中都使用标识列作为 ID - 并且对于同时具有另一个文件夹和报告项目作为子项的文件夹的标识重复.

我刚刚添加了一个检查以仅调用文件夹项目的递归,它现在可以正常工作。

我知道这是一个愚蠢的星期五错误。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2016-11-11
    • 2015-04-04
    • 2018-12-02
    • 2017-09-06
    • 2019-07-08
    • 2015-08-05
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多