Treeview检查的节点未按顺序返回

时间:2010-01-03 20:36:17

标签: asp.net treeview

我在ASP.NET 3.5 Web应用程序中使用TreeView和ShowCheckBoxes =“All”,并且由于某种原因,未按顺序返回已检查的节点。假设我有节点A,B,C和I选择B和C并点击保存按钮,当我检查Treeview的CheckedNodes属性时,检查的节点按顺序(B,C)。但是下次当我返回页面并选择节点A时,订单将返回B,C,A。这种行为可能是什么原因?

2 个答案:

答案 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
}