Ir al contenido principal

Treeview Persistente

Protected Sub TreeView1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.Load
'Verifico si existe en Sesi¢n el estado del treeview
'Si existe deshabilito el ExpandDepth
If Session("TreeViewState") IsNot Nothing Then
Me.TreeView1.ExpandDepth = 0
End If
'Cuando hago el bound entre mi fuente de datos y el treeview
'verifico si existe o no el estado del treeview guardado en sesi¢n
If Session("TreeViewState") Is Nothing Then
' Si no existe, grabo el estado actual de expandidos/contraidos del TreeViews
Dim list As ArrayList = New ArrayList
SaveTreeViewState(TreeView1.Nodes, list)
Session("TeeViewState") = list
Else
'Si existe, restauro el estado guardado de expandidos/contraidos del TreeViews
Dim list As ArrayList = CType(Session("TreeViewState"), ArrayList)
RestoreTreeViewState(TreeView1.Nodes, list)
End If
End Sub

Protected Sub TreeView1_TreeNodeCollapsed(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodeCollapsed
If IsPostBack Then
Dim list As ArrayList = New ArrayList
SaveTreeViewState(TreeView1.Nodes, list)
Session("TreeViewState") = list
End If
End Sub

Protected Sub TreeView1_TreeNodeExpanded(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodeExpanded
If IsPostBack Then
Dim list As ArrayList = New ArrayList
SaveTreeViewState(TreeView1.Nodes, list)
Session("TreeViewState") = list
End If
End Sub

'''
''' Guarda el estado de nodos expandidos en la variable de sesi¢n
'''

Private Sub SaveTreeViewState(ByVal nodes As TreeNodeCollection, ByVal list As ArrayList)
' Guarda de forma recursiva todos los nodos expandidos en el ArrayList (List)
For Each node As TreeNode In nodes
If (node.ChildNodes IsNot Nothing And node.ChildNodes.Count <> 0) Then
If (node.Expanded.HasValue AndAlso CBool(node.Expanded) AndAlso Not String.IsNullOrEmpty(node.Text)) Then
list.Add(node.Text)
SaveTreeViewState(node.ChildNodes, list)
End If
End If
Next
End Sub

'''
''' Restaura el estado de los nodos del Treeview
'''

Private Sub RestoreTreeViewState(ByVal nodes As TreeNodeCollection, ByVal list As ArrayList)
For Each node As TreeNode In nodes
' Restaura el estado de un nodo.
If list.Contains(node.Text) Then
If (node.ChildNodes IsNot Nothing AndAlso (node.ChildNodes.Count <> 0) AndAlso (Not node.Expanded.HasValue)) Then ' AndAlso node.Expanded.GetValueOrDefault(False)) Then
node.Expand()
End If
ElseIf (node.ChildNodes IsNot Nothing AndAlso node.ChildNodes.Count <> 0 AndAlso node.Expanded.HasValue) Then ' AndAlso node.Expanded.GetValueOrDefault(True)) Then
node.Collapse()
End If
' Si el nodo tiene un nodo "hijo" restaura su estado tambi‚n
If (node.ChildNodes IsNot Nothing AndAlso node.ChildNodes.Count <> 0) Then
RestoreTreeViewState(node.ChildNodes, list)
End If
Next
End Sub

Comentarios

Anónimo dijo…
Coin Casino | Play with bitcoin at the best online casino
Coin Casino is a new หารายได้เสริม casino launched in 메리트 카지노 2015 by Quickspin Holdings, a company that is part of the London-based casino software 인카지노

Entradas más populares de este blog

Notas Rápidas en Windows 7

ShortCuts Negrita = Ctrl + B Cursiva = Ctrl + I Texto subrayado = Ctrl + U Tachado = Ctrl + T Lista con viñetas = Ctrl + Mayús + L (ejecutarlo varias veces cambia el estilo) Mayor tamaño de texto = Ctrl + Mayús + , (coma) Menor tamaño de texto = Ctrl + Mayús + . (punto) Alinear texto a la derecha = Ctrl + R Alinear texto a la izquierda = Ctrl + L Cambiar a mayusculas el texto = Ctrl + Mayús + A Espacio entre parrafos = Ctrl + 1, Ctrl + 2 y Ctrl + 5 Crear nueva nota = Ctrl + N Eliminar nota seleccionada = Ctrl + D Seleccionar texto = Ctrl + A Cambiar de nota = Ctrl + Tab