Вы не указали, используете ли вы C# или VB, но подход одинаковый в любом случае.
Вы начинаете с создания TreeNode для каждого человека верхнего уровня (те, у которых нет идентификаторов менеджера, или со специальным кодом ManagerID, указывающим верхний уровень).
Затем, рекурсивно, для каждого человека, который сообщает текущему менеджеру, создайте новый TreeNode и добавьте его как дочерний элемент для текущего менеджера. Найдите всех, кто ему докладывает, и примените к ним эту функцию. Остановитесь, когда никто не отчитается перед текущим человеком.
Итак, если у вас есть набор данных с подробностями этой таблицы, вы могли бы сделать что-то вроде этого (например, VB):
Sub PopulateTreeNode(
CurrentNode As TreeNode,
CurrentManagerID As String,
Table As DataTable
) As TreeNode
For Each Row As DataRow In _
DataTable.Select("ManagerID = '" & CurrentManagerID & "'")
Dim CurrentUser As String = Row("ID").ToString()
Dim Node As New TreeNode(CurrentUser)
PopulateTreeNode(Node, CurrentUser, Table)
CurrentNode.Nodes.Add(Node)
Next
End Sub
Спасибо, что он работает, чтобы избежать сообщения, чтобы узел был выбран, но он не будет отправлен обратно на сервер. – muthu
Вы можете обернуть его в UpdatePanel или установить свойство AutoPostBack для Дерева и его узлов - false. – Welbog