HierarchicalCollectionView: одноразовая сортировка? - PullRequest
1 голос
/ 16 мая 2011

У меня есть AdvancedDataGrid, который использует HierarchicalCollectionView в качестве dataProvider. Я хотел бы отсортировать данные при первой загрузке, но затем отключить сортировку, чтобы все, что было добавлено после начальной загрузки, не приводило к повторной автоматической сортировке сетки. Я пробовал что-то вроде этого:

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;

Но если задать для сортировки значение null, данные останутся несортированными. Я предполагаю, что я спрашиваю: как я могу отсортировать лежащие в основе иерархические данные, так как кажется, что установка свойства sort сохранит их динамическую сортировку. Спасибо за любую помощь, вы можете предоставить.

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Лично я бы изменил порядок сортировки, когда вы получаете данные. Либо это делается на стороне сервера, либо когда вы анализируете данные (т.е. в вашей модели). Вы можете выполнить однократную сортировку, используя Array с sortOn.

0 голосов
/ 30 мая 2013

У меня была такая же проблема, пока я не понял, что сортировка с помощью объекта Сортировка не меняет «физический» порядок элементов в Коллекции, поэтому при удалении Сортировки следующее обновление возвращает представление к фактическому«физический» порядок.Подобно тому, как указано выше, я решил с помощью клонирования вложенных коллекций в отсортированном порядке следующим образом:

    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;
    }
0 голосов
/ 16 мая 2011

вы можете: 1. сортировать исходные данные с помощью функции сортировки, 2. клонировать содержимое и помещать его в новую коллекцию без сортировки (будьте осторожны, делайте ручное клонирование), 3. просто использовать новый сбор данных.

...