2009-04-22 59 views
2

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

有什么办法可以在ASP.NET中自动实现这个操作,还是我需要手动排序并按照正确的顺序插入我的节点?

+0

检查此解决方案: [http://www.codeproject.com/Tips/252234/ASP-NET-TreeView-Sort](http:// www.codeproject.com/Tips/252234/ASP-NET-TreeView-Sort) – bruno2007 2011-09-09 15:10:36

回答

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); 
} 

第一个链接包含你需要完成

+0

我知道扩展方法,但我更喜欢构建自己的控件继承自TreeView并实现新功能。 否则,你的链接提供了一个完整的详细解决方案,所以我会接受你的anwer,如果我几次没有收到其他人的话:) – 2009-04-22 12:19:49

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);