1

我有一個AdvancedDataGrid依賴於HierarchicalCollectionView,因爲它是dataProvider。我想要做的是在數據首次加載時對數據進行排序,但是禁用排序,以便在初始加載後添加的任何內容不會導致網格再次自動排序。我試過這樣的事情:HierarchicalCollectionView:一次排序?

this._myDataProvider = new HierarchicalCollectionView(
          new HierarchicalData(this._model.rootTasks)); 

var mySort:Sort = new Sort();     
mySort.fields = [new SortField("startDate")]; 

this._tasksDataProvider.sort = taskSorting; 
this._tasksDataProvider.refresh(); 
this._tasksDataProvider.sort = null; 

但是將排序設置爲空只會使數據未排序。我想我問的是:我怎麼能排序底層的分層數據,因爲它似乎設置排序屬性將保持動態排序。感謝您的任何幫助,您可以提供。

回答

2

就個人而言,我會在獲取數據時更改排序順序。要麼在服務器端完成,要麼在解析數據時(即在模型中)。您可以使用sortOn使用Array進行一次性排序。

0

可以 1排序將原始數據與排序功能, 2.克隆的內容並把它放到一個新的集合,沒有那種(小心不要做出了手工克隆), 3只使用新數據採集​​。

+0

你說的意思是「使手工克隆」? – Ocelot20 2011-05-16 12:32:14

0

我有同樣的問題,直到我意識到使用Sort對象進行排序不會更改Collection中項目的「物理」順序,因此,當您移除Sort時,下一次刷新會將視圖還原爲實際的「物理」排序。相若方式 如上所述,我解決了它通過克隆的子集到的排序順序這樣:

public static function buildPositionSort():Sort 
    { 
     var dataSortField:SortField = new SortField(); 
     dataSortField.name = "position"; 
     dataSortField.numeric = true; 
     dataSortField.descending = false; 
     var sort:Sort = new Sort(); 
     sort.fields = [ dataSortField ]; 
     return sort; 
    } 
    /** 
    * This method is used to create a clone of ArrayCollection, because sorting does not 
    * actually change the physical ordering of the items. 
    */ 
    public static function createSortedArrayCollectionCopy(source:ArrayCollection):ArrayCollection 
    { 
     var target:ArrayCollection = new ArrayCollection(); 
     source.sort = buildPositionSort(); 
     source.refresh(); 
     for each (var item:Object in source) 
     { 
      if (item.children != null) item.children = createSortedArrayCollectionCopy(item.children); 
      target.addItem(item); 
     } 
     return target; 
    }