2009-07-14 3 views
1

я должен построить дерево, используя следующие данные, который поставляется с БД:Построение TreeView динамически

ID   Name  ManagerID 
180002  john  180001 
180003  Michel 180002 
180005  smith 180003 

john 
|_Michel 
    |_ smith 

В частности, мне нужно сделать элемент управления ASP.NET TreeView. Глубина TreeView не фиксирована.

ответ

0

Вы не указали, используете ли вы 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 
+0

Спасибо, что он работает, чтобы избежать сообщения, чтобы узел был выбран, но он не будет отправлен обратно на сервер. – muthu

+0

Вы можете обернуть его в UpdatePanel или установить свойство AutoPostBack для Дерева и его узлов - false. – Welbog

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