2010-01-03 73 views
3

我在ASP.NET 3.5 Web应用程序中使用TreeView和ShowCheckBoxes =“All”,出于某种原因,检查的节点没有按顺序返回。比方说,我有节点A,B,C和我选择B和C并点击保存按钮,当我检查Treeview的CheckedNodes属性时,检查的节点按顺序(B,C)。但下一次当我回到页面并选择节点A时,订单正在返回B,C,A。什么可能是这种行为的原因?Treeview checked nodes not order in order

回答

2

CheckedNodes是刚刚实现ICollection的一个TreeNodeCollection。当checkChanged事件触发时,它可能只是将树节点添加到CheckedNodes集合中。

什么我可以看到on MSDN意味着你应该承担的节点将被订购。所有它说的是:

每次网页发布到 服务器时,CheckedNodes收集 与 选择的节点自动填充。

从您的实验中,似乎可以安全地假设在第二次回发时,它只是将任何新的已检查节点添加到集合中,而不是清除集合并重新添加所有内容。

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 
}