我需要在ASP.Net中创建一个多级树视图(使用VB),但我完全不知道如何启动它。目前我的树视图是一个固定的2级方法,但现在我需要重写它以更加动态,并支持将额外的级别添加到我们的数据库表中。
因此,这个树视图需要支持所需的多个级别,而不必在每次我们想要添加新级别时重写任何代码。理想情况下,我们只需在数据库级别插入数据。
我认为我正确设计了数据库部分,我创建了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
从这里我不确定去哪里,我读到asp Treeview可以将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
答案 0 :(得分:2)
您创建的数据库结构似乎没问题,但是将itemid重命名为parentid,将childid重命名为itemid对我来说更容易理解(我希望看到当前项目的parentid)
您可以通过阅读以下链接一步一步地进行,他们试图让它变得简单易懂。我希望这会有所帮助。
http://aspalliance.com/732_Display_Hierarchical_Data_with_TreeView_in_ASPNET_20