C # Заполнение TreeView Рекурсивное переполнение стека - PullRequest
2 голосов
/ 11 ноября 2011

Woohoo!Я получаю возможность опубликовать вопрос о переполнении стека ... на stackoverflow:)

Так что может случиться так, что сегодня пятница, и мой мозг уже занят, но я пытаюсь написать класс, который рекурсивно заполняетданный TreeView с универсальным типом объекта, который наследуется от TreeNode и простым интерфейсом.

По какой-то причине я получаю исключение 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);
    }
}

1 Ответ

2 голосов
/ 11 ноября 2011

ОК, так что Хенк понял, что был цикл.

У меня было 2 отдельные таблицы с элементами папки и элементами отчета, которые заполняли древовидное представление - я использовал столбец идентификаторов в качестве идентификатора в обоих -и удостоверение было продублировано для папки, в которой и другая папка, и элементы отчета были дочерними.

Я просто добавил проверку, чтобы вызывать рекурсию только для элементов папки, и теперь она отлично работает.

Я знал, что это глупая пятничная ошибка.

Спасибо за помощь!

...