创建具有多个级别的ASP.NET Treeview

时间:2012-03-20 12:26:25

标签: asp.net sql xml vb.net treeview

我需要在ASP.Net中创建一个多级树视图(使用VB),但我完全不知道如何启动它。目前我的树视图是一个固定的2级方法,但现在我需要重写它以更加动态,并支持将额外的级别添加到我们的数据库表中。

因此,这个树视图需要支持所需的多个级别,而不必在每次我们想要添加新级别时重写任何代码。理想情况下,我们只需在数据库级别插入数据。

我认为我正确设计了数据库部分,我创建了2个表MenuMenuItems

Menu有2列ItemIDChildID

MenuItems有2列ItemIDDescription

执行此查询:

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

1 个答案:

答案 0 :(得分:2)

您创建的数据库结构似乎没问题,但是将itemid重命名为parentid,将childid重命名为itemid对我来说更容易理解(我希望看到当前项目的parentid)

您可以通过阅读以下链接一步一步地进行,他们试图让它变得简单易懂。我希望这会有所帮助。

http://aspalliance.com/732_Display_Hierarchical_Data_with_TreeView_in_ASPNET_20