Когда-то мучилась с выводом дерева. Мучения заключались в отсутствии понимания, обработку каких событий проводить.
Суть в том, что при загрузке формы отображаются все родительские узлы в свернутом виде, и к ним же уже подгружены все узлы-потомки. При раскрытии узла-родителя необходимо подгружать потомков потомков (т.е. «внуков» раскрываемого узла).
Делается это в обработчике события 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]);
}
}
}