У меня есть требование создать многоуровневое древовидное представление в 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