我在ASP.NET 3.5 Web应用程序中使用TreeView和ShowCheckBoxes =“All”,并且由于某种原因,未按顺序返回已检查的节点。假设我有节点A,B,C和I选择B和C并点击保存按钮,当我检查Treeview的CheckedNodes属性时,检查的节点按顺序(B,C)。但是下次当我返回页面并选择节点A时,订单将返回B,C,A。这种行为可能是什么原因?
答案 0 :(得分:2)
CheckedNodes是一个TreeNodeCollection,它只实现了ICollection。当checkChanged事件触发时,它可能只是将树节点添加到CheckedNodes集合。
我无法看到on MSDN暗示你应该假设节点会被订购。它只是说:
每次页面发布到 服务器,CheckedNodes集合是 自动填充 选定的节点。
从您的实验中,可以安全地假设在第二次回发时,它只是将任何新的已检查节点添加到集合中,而不是清除集合并重新添加所有内容。
答案 1 :(得分:0)
对CheckedNodes
集合进行排序的简单例程就足以解决此问题。我在搜索中遇到的这个例程(http://urenjoy.blogspot.com/2009/06/sort-checkednodes-treenodecollection-in.html)直接通过在循环遍历集合之前调用来工作。它实质上是在一个简单的比较中检查文本,并按顺序返回一个新的集合。
从上面的链接:
private TreeNodeCollection SortTreeNode(TreeNodeCollection nodeList)
{
for (int i = 0; i < nodeList.Count-1; i++)
{
for (int j = i + 1; j < nodeList.Count; j++)
{
if (nodeList[i].Text.CompareTo(nodeList[j].Text)>0)
{
TreeNode temp = nodeList[i];
nodeList.RemoveAt(i);
nodeList.AddAt(i,nodeList[j-1]);
nodeList.RemoveAt(j);
nodeList.AddAt(j, temp);
}
}
}
return nodeList;
}
调用代码示例:
var tncInOrder = SortTreeNode(this.MyTreeView.CheckedNodes);
foreach (TreeNode node in tncInOrder )
{
//Iterate through the nodes in order
}