2010-01-03 74 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 
}