2009-04-22 61 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);