El rincón de JMACOE

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

TreeView mytree = new TreeView();
//Agrega tus nodos aquí

VB.Net

Dim mytree as TreeView = new TreeView()
'Agrega tus nodos aquí

Después, simplemente llamas a la función de clasificación con el nodo principal como argumento:

CSharp

sort(node);

VB.Net

Sort(node)

Esta es la función recursiva:

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 { }
}

VB.Net

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

Comparte y diviertete: