我习惯于winform TreeView
拥有Sorted
属性,可以自动管理节点排序。
我现在必须按字母顺序对ASP.NET TreeView
进行排序,我很惊讶我找不到任何类似的属性或回调方法。
有没有办法在ASP.NET中自动实现此操作,还是必须以正确的顺序手动排序和插入节点?
答案 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);