TreeView ve WEBFORMS ASP.NET a hierarchická data v jedné tabulce

Sekce: Programování / VB.Net   Datum: 12.11.2015, Autor:  Mrk, ID: 2, přečteno 1875x

Potřebujete naplnit TreeView a máte data v jedné tabulce kde se jeden záznam odkazuje na druhý? Tady je postup jak toho jednoduše docílit. Klíčová slova: ASP.NET, VBNET, VB.NET, TreeView

Na stránku si vložte komponentu TreeView a pojmenujte jí tvwSekce.

Do zdrojového kódu třídy stránky přidejte tento kód.

Public Sub FillTreeMenu()
        tvwSekce.Clear()
        Dim sqlQuery As New SqlCommand("SELECT SekceID,SekceNazev,SekceParentID FROM ArtSekce where SekceParentID=0 and SekceID<>0")
        Dim ResultSet As DataSet
        ResultSet = RunQuery(sqlQuery)
        If ResultSet.Tables.Count > 0 Then
            Dim row As DataRow
            For Each row In ResultSet.Tables(0).Rows
                Dim xNod As New TreeNode(row("SekceNazev").ToString & "  (" & row("SekceID").ToString & ")", "K" & row("SekceID").ToString)
                xNod.NavigateUrl = "ArtSekceManage.aspx?id=" & row("SekceID").ToString
                tvwSekce.Nodes.Add(xNod)
                NactiPotomky(row("SekceID").ToString, xNod)
            Next
        End If
    End Sub


    Sub NactiPotomky(ByVal ParentID As String, ByRef xRodic As TreeNode)
        Dim sqlQuery As New SqlCommand("SELECT SekceID,SekceNazev,SekceParentID FROM ArtSekce where SekceParentID=" & ParentID)
        Dim ResultSet As DataSet
        Dim idNodu As String = ""
        ResultSet = RunQuery(sqlQuery)
        If ResultSet.Tables.Count > 0 Then
            Dim row As DataRow
            For Each row In ResultSet.Tables(0).Rows
                idNodu = "K" & row("SekceID").ToString
                Dim xNod As New _
TreeNode(row("SekceNazev").ToString & "  (" & row("SekceID").ToString & ")", idNodu)
                xNod.NavigateUrl = "ArtSekceManage.aspx?id=" & row("SekceID").ToString
                xRodic.ChildNodes.Add(xNod)
                NactiPotomky(row("SekceID").ToString, xNod)
            Next
        End If
    End Sub



    Function RunQuery(ByVal sqlQuery As SqlCommand) As DataSet
        Dim connectionString As String = _ ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString

        Dim dbConnection As New SqlConnection(connectionString)
        Dim dbAdapter As New SqlDataAdapter
        dbAdapter.SelectCommand = sqlQuery
        sqlQuery.Connection = dbConnection
        Dim resultsDataSet As DataSet = New DataSet
        Try
            dbAdapter.Fill(resultsDataSet)
        Catch ex As Exception

        End Try
        Return resultsDataSet
    End Function

V události Load pak pokud není PostBack volejte FillTreeMenu.

 

Předpokládá se automaticky:
     Import System.Data a System.Data.SQLClient.
     Tabulka SQL ve formátu SekceID, SekceNazev, SekceParentID
      Konfigurace ve web.config datového připojení DefaultConnection.

 

Samozřejmě pokud to máte jinak musíte si kód upravit.
Zkoušeno na verzi frameworku 4.5.1