ASP.NET TreeView排序

时间:2009-04-22 08:18:33

标签: asp.net sorting treeview

我习惯于winform TreeView拥有Sorted属性,可以自动管理节点排序。 我现在必须按字母顺序对ASP.NET TreeView进行排序,我很惊讶我找不到任何类似的属性或回调方法。

有没有办法在ASP.NET中自动实现此操作,还是必须以正确的顺序手动排序和插入节点?

2 个答案:

答案 0 :(得分:4)

您需要编写自己的排序功能,但添加此功能相当简单。

http://blog.mdk-photo.com/post/C-Extentionmethod-Tree-Node-View-Sort().aspx

.NET 3.5支持扩展方法,因此您可以向预先存在的系统类添加功能。请注意方法参数的this语法。 More Info Here

public static void Sort(this TreeView tv)
{
    TreeNodeCollection T = tv.Nodes.Sort();
    tv.Nodes.Clear();
    tv.Nodes.AddRange(T);
}

public static void Sort(this TreeNode tn)
{
    TreeNodeCollection T = tn.ChildNodes.Sort();
    tn.ChildNodes.Clear();
    tn.ChildNodes.AddRange(T);
} 

第一个链接包含完成排序功能所需的其余代码

答案 1 :(得分:3)

三年后,TreeView仍然不支持本地排序。这是一种按字母顺序对所有节点进行排序的简单方法。

private void SortTreeNodes(TreeNodeCollection treeNodes)
{
    var sorted = true;

    foreach (TreeNode treeNode in treeNodes)
    {
        SortTreeNodes(treeNode.ChildNodes);
    }

    do
    {
        sorted = true;

        for (var i = 0; i < treeNodes.Count - 1; i++)
        {
            var treeNode1 = treeNodes[i];
            var treeNode2 = treeNodes[i + 1];

            if (treeNode1.Text.CompareTo(treeNode2.Text) > 0)
            {
                treeNodes.RemoveAt(i + 1);
                treeNodes.RemoveAt(i);

                treeNodes.AddAt(i, treeNode2);
                treeNodes.AddAt(i + 1, treeNode1);

                sorted = false;
            }
        }
    } while (!sorted);
}

像这样称呼

SortTreeNodes(myTreeView.Nodes);