Ordenar un TreeView ASP .Net
Hace unos días, tuve que ordenar los nodos de un treeview. Las soluciones que he encontrado a través de Internet no me gustaban, así que decidí escribir mi propia función. Esta solución es una función recursiva simple que ordena los nodos del árbol en un orden alfabético.
Crea el treeview y agregas los nodos:
CSharp
[csharp]
TreeView mytree = new TreeView();
//Agrega tus nodos aquí
[/csharp]
VB.Net
[vbnet]
Dim mytree as TreeView = new TreeView()
‘Agrega tus nodos aquí
[/vbnet]
Después, simplemente llamas a la función de clasificación con el nodo principal como argumento:
CSharp
[csharp]
sort(node);
[/csharp]
VB.Net
[vbnet]
Sort(node)
[/vbnet]
Esta es la función recursiva:
CSharp
[csharp]
private void sort(TreeNode node)
{
foreach (TreeNode n in node.ChildNodes)
sort(n);
try
{
TreeNode temp = null;
List<TreeNode> childs = new List<TreeNode>();
while(node.ChildNodes.Count>0)
{
foreach (TreeNode n in node.ChildNodes)
if (temp == null || n.Text[0] < temp.Text[0])
temp = n;
node.ChildNodes.Remove(temp);
childs.Add(temp);
temp = null;
}
node.ChildNodes.Clear();
foreach (TreeNode a in childs)
node.ChildNodes.Add(a);
}
catch { }
}
[/csharp]
VB.Net
[vbnet]
Private Sub sort(node As TreeNode)
For Each n As TreeNode In node.ChildNodes
sort(n)
Next
Try
Dim temp As TreeNode = Nothing
Dim childs As New List(Of TreeNode)()
While node.ChildNodes.Count > 0
For Each n As TreeNode In node.ChildNodes
If temp Is Nothing OrElse n.Text(0) < temp.Text(0) Then
temp = n
End If
Next
node.ChildNodes.Remove(temp)
childs.Add(temp)
temp = Nothing
End While
node.ChildNodes.Clear()
For Each a As TreeNode In childs
node.ChildNodes.Add(a)
Next
Catch
End Try
End Sub
[/vbnet]