2014-02-19 2 views
3

В настоящее время у меня есть список элементов (Tuple), которые были сгенерированы программно ранее, что я теперь пытаюсь переходить в TreeView рекурсивно, но я немного борюсь с тем, чтобы он работал правильно.C# Создать TreeView рекурсивно из списка

Пример списка: Наименование | Уровень

Fruits | 0 
Apples | 1 
Green Apples | 2 
Golden Delicious | 3 
Granny Smith | 3 
Cox Orange Pipper | 2 
Red Apples | 2 
Pink Lady | 3 
Red Delicious | 3 
Oranges | 1 
Blood | 2 
Mandarins | 2 
Vegetables | 0 
Lettuce | 1 
Iceberg | 2 
Romain | 2 

Так что мой выход хочет быть:

Fruits (0) 
- Apples (1) 
-- Green Apples (2) 
--- Granny Smith (3) 
--- Golden Delicious (3) 
-- Cox Orange Pipper(2) 
-- Red Apples (2) 
--- Pink Lady (3) 
--- Red Delicious (3) 
- Oranges (1) 
-- Blood (2) 
-- Mandarins (2) 
Vegetables (0) 
- Lettuce (1) 
-- Iceberg (2) 
-- Romain (2) 

Примечание: Обратитесь к ответу из LarsTech ниже совершенно тонкой рабочего раствора. Спасибо!

Я удалил код ошибки/попытки, и я оставлю все это для других, у кого такая же проблема.

+0

что именно является «LastNode» здесь? Это родительский узел? Также что делает 'roots.Add (tree.Nodes.Add (" Items "))' do? Добавляет ли возвращенный новый TreeNode? – arviman

+0

Не могли бы вы разместить структуру классов 'TreeItem'' TreeNode' и 'TreeView'? – arviman

+0

Убрал сообщение немного. Ответ, предоставленный LarsTech, идеален. – user3295596

ответ

0

Значение «Уровень» каждый узел является единственной ссылкой у вас есть к родителю, так что вы можете просто держать словарь уровней ссылаться на последний узел, используемый для этого уровня:

Dictionary<int, TreeNode> lastParent = new Dictionary<int, TreeNode>(); 
foreach (Tuple<string, int> food in foods) { 
    TreeNodeCollection items; 
    if (food.Item2 == 0) { 
    items = treeView1.Nodes; 
    } else { 
    items = lastParent[food.Item2 - 1].Nodes; 
    } 
    TreeNode treeNode = items.Add(food.Item1); 
    if (lastParent.ContainsKey(food.Item2)) { 
    lastParent[food.Item2] = treeNode; 
    } else { 
    lastParent.Add(food.Item2, treeNode); 
    } 
} 
treeView1.ExpandAll(); 
+0

Большое спасибо, это абсолютно идеально и решает проблему с легкостью, я очень благодарен. – user3295596

Смежные вопросы