Создание ASP.NET Treeview с несколькими уровнями - PullRequest
1 голос
/ 20 марта 2012

У меня есть требование создать многоуровневое древовидное представление в ASP.Net (с VB), но я полностью застрял на том, как начать это. В настоящее время мой древовидный подход представляет собой фиксированный двухуровневый подход, но теперь мне нужно переписать его, чтобы сделать его более динамичным и поддерживать добавление дополнительных уровней в таблицы нашей базы данных.

Таким образом, это древовидное представление должно поддерживать столько уровней, сколько необходимо, без необходимости переписывать какой-либо код каждый раз, когда мы хотим добавить новый уровень. В идеале мы просто вставим данные на уровне базы данных.

Я думаю, что часть базы данных спроектирована правильно, я создал 2 таблицы Menu и MenuItems

Menu имеет 2 столбца ItemID и ChildID

MenuItems имеет 2 столбца ItemID и Description

Делаем этот запрос:

SELECT 
    menu.Item_ID, 
    menu.Child_ID , 
    parent.ID,
    parent.Description,
    child.ID,
    child.Description 
FROM 
    tblSupportTicketMenu menu
JOIN 
    tblSupportTicketMenuItems parent
ON
    parent.ID = menu.Item_ID
JOIN
    tblSupportTicketMenuItems child
ON
    child.ID = menu.Child_ID 

Вернет эти данные:

Item_ID     Child_ID    ID          Description                                                                                          ID          Description
----------- ----------- ----------- ---------------------------------------------------------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
32          33          32          Level 1                                                                                              33          Level 2
33          34          33          Level 2                                                                                              34          Level 3
35          36          35          Item 2 Level 1                                                                                       36          Item 2 Level 2
36          37          36          Item 2 Level 2                                                                                       37          Item 2 Level 3

Отсюда я не уверен, куда идти, я прочитал, что TreeView asp может принять XML в качестве источника данных, и это, кажется, хорошая идея, но как я могу выбрать данные в формате, который будет поддерживать несколько уровней и т. Д.?

Если кто-то знает, как это сделать или может связать меня с руководством, я был бы очень признателен, а также, если делать это, поскольку XML - плохая идея, я открыт для других предложений, я все еще изучаю ASP.Net, поэтому я хотел бы сделать это правильно.

Чтобы быть точным, это код, который я сейчас заменяю, который генерирует для меня древовидное представление.

   Dim ds As New DataTable

      Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

      Dim cmd As New SqlCommand
      cmd.CommandType = CommandType.StoredProcedure
      cmd.CommandText = "spGetMenuItemsForTickets"

      cmd.Connection = conn

      Using da As New SqlDataAdapter(cmd)
         conn.Open()
         da.Fill(ds)
         conn.Close()
      End Using

      Dim ParentIds As List(Of Integer) = New List(Of Integer)

      For Each row As DataRow In ds.Rows

         If ParentIds.Contains(row("ParentID")) Then
            '' Do Nothing 
         Else
            ParentIds.Add(row("ParentID"))
         End If
      Next

      For Each Parent As Integer In ParentIds
         Dim parentNode As New System.Web.UI.WebControls.TreeNode

         For Each child In ds.Rows
            If (child("ParentID") = Parent) Then

               Dim childNode As New System.Web.UI.WebControls.TreeNode

               parentNode.Text = child("ParentDescription")
               parentNode.Value = child("ParentID")
               parentNode.Expanded = False

               childNode.Text = child("ChildDescription")
               childNode.Value = child("ChildID")


               parentNode.SelectAction = TreeNodeSelectAction.None
               parentNode.ChildNodes.Add(childNode)
            End If
         Next
         trvItem.Nodes.Add(parentNode)
      Next

      trvItem.Nodes(0).Text += String.Empty

1 Ответ

2 голосов
/ 20 марта 2012

Структура базы данных, которую вы создали, кажется нормальной, однако переименование itemid в parentid и childid в itemid будет более понятным для меня (мне нравится видеть parentid для текущего элемента)

Вы можете пойти шаг за шагом, прочитав следующую ссылку, они постарались сделать ее проще для понимания. Я надеюсь, что это поможет.

http://aspalliance.com/732_Display_Hierarchical_Data_with_TreeView_in_ASPNET_20

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...