我習慣於winform TreeView
擁有一個Sorted
屬性,該屬性自動管理節點排序。 我現在必須按字母順序排序一個ASP.NET TreeView
,我很驚訝我找不到任何類似的屬性或回調方法。ASP.NET TreeView排序
有什麼辦法可以在ASP.NET中自動實現這個操作,還是我需要手動排序並按照正確的順序插入我的節點?
我習慣於winform TreeView
擁有一個Sorted
屬性,該屬性自動管理節點排序。 我現在必須按字母順序排序一個ASP.NET TreeView
,我很驚訝我找不到任何類似的屬性或回調方法。ASP.NET TreeView排序
有什麼辦法可以在ASP.NET中自動實現這個操作,還是我需要手動排序並按照正確的順序插入我的節點?
你需要編寫自己的排序功能,但它的相當小的添加這個功能。
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);
}
第一個鏈接包含你需要完成
我知道擴展方法,但我更喜歡構建自己的控件繼承自TreeView並實現新功能。 否則,你的鏈接提供了一個完整的詳細解決方案,所以我會接受你的anwer,如果我幾次沒有收到其他人的話:) – 2009-04-22 12:19:49
三年後和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);
檢查此解決方案: [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