Когда-то мучилась с выводом дерева. Мучения заключались в отсутствии понимания, обработку каких событий проводить.
Суть в том, что при загрузке формы отображаются все родительские узлы в свернутом виде, и к ним же уже подгружены все узлы-потомки. При раскрытии узла-родителя необходимо подгружать потомков потомков (т.е. «внуков» раскрываемого узла).
Делается это в обработчике события BeforeExpand (в принципе можно и в AfterExpand, но как-то логически неверно), а узел, который «проэкспандился» можно получить из параметров обработчика события e.Node.
private void treeBrowser_BeforeExpand(object sender, TreeViewCancelEventArgs e) { for (int i = 0; i < e.Node.Nodes.Count; i++) { List ChildrenIDList; int res_ch = DeviceTypeRelations.GetChildrenOfParent(e.Node.Nodes[i].Text, out ChildrenIDList); for (int j = 0; j < ChildrenIDList.Count; j++) { e.Node.Nodes[i].Nodes.Add(ChildrenIDList[j]); } } }