我习惯于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