Заставить конкретный узел расширяться на основе URL-адресов навигации его дочерних узлов.

Итак, у меня есть TreeView, и у него около 7 родительских узлов, каждый из которых имеет 3-5 дочерних узлов. Все эти дочерние узлы при нажатии переходят по URL-адресу. Я бы хотел, чтобы один родительский узел автоматически разворачивался на основе URL-адреса, а другие родительские узлы свертывались.

Если это было непонятно, вот пример:

Root
 |
 |--Admin
 |  |
 |  |--Add.aspx
 |  |--Delete.aspx
 |
 |
 |
 |--Purchases
    |
    |--Orders.aspx
    |--Stock.aspx

Допустим, пользователь щелкнул Orders.aspx, это переместит их на эту страницу, и когда это произойдет, я бы хотел, чтобы древовидное представление свернуло все родительские узлы и развернуло текущий родительский узел. Таким образом, Admin будет свернут, а Purchases расширен.

До сих пор я пытался сделать следующее:

Protected Sub resize(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.Load
    For Each node As TreeNode In (CType(sender, TreeView)).Nodes
        If node.NavigateUrl = GetCurrentPage() Then
            For Each parentN As TreeNode In (CType(sender, TreeView)).Nodes
                If Not (parentN.Parent.Selected = True And node.Parent.Text = parentN.Parent.Text) Then
                    parentN.Collapse()
                Else : parentN.Expand()
                End If
            Next
        End If
    Next
End Sub


Public Shared Function GetCurrentPage() As String
    Return System.IO.Path.GetFileName(HttpContext.Current.Request.Url.AbsolutePath).ToLower
End Function

Я не совсем уверен, как это сделать.


person Justen    schedule 08.11.2009    source источник


Ответы (1)


Если ваше дерево не сложнее, чем вы описываете, почему этот цикл не работает?

For Each node As TreeNode In (CType(sender, TreeView)).Nodes
    If node.NavigateUrl = GetCurrentPage() Then
        node.Expand()
    Else
        node.Collapse()
    End If
Next
person Dolph    schedule 08.11.2009
comment
Полагаю, да, но что бы я поставил для ручки? На данный момент у меня есть Handles TreeView1.SelectedNodeChanged, но это даже не выполняется. Я протестировал, поставив в него точку останова, и он никогда не останавливается на достигнутом. - person Justen; 08.11.2009