2010-01-03 4 views
3

Я использую TreeView с ShowCheckBoxes = «Все» в веб-приложении ASP.NET 3.5 и по какой-либо причине проверенные узлы не возвращаются по порядку. Допустим, у меня есть узлы A, B, C, и я выбираю B и C и нажимаю кнопку сохранения, и когда я проверяю свойство CheckedNodes TreeView, проверенные узлы находятся в порядке (B, C). Но в следующий раз, когда я вернусь на страницу и выберу узел А, возвращается заказ B, C, A. Что может быть причиной такого поведения?Проверенные узлы Treeview не возвращаются в порядке

ответ

2

CheckedNodes - это TreeNodeCollection, который только реализует ICollection. Когда происходит событие 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 
} 
Смежные вопросы