Flex AdvancedDataGrid - PullRequest
       13

Flex AdvancedDataGrid

0 голосов
/ 23 июня 2011

У меня есть AdvancedDatagrid в моем приложении Flex.

<mx:AdvancedDataGrid id="reportGrid" creationComplete="groupedData.refresh()" width="100%" height="100%" variableRowHeight="true">
                    <mx:dataProvider>
                        <mx:GroupingCollection2 id="groupedData" source="{reportData}"/>
                    </mx:dataProvider>
                </mx:AdvancedDataGrid>

Я динамически назначаю столбцы, группировки и сводки для groupedData GroupingCollection2.Когда я фильтрую источник данных и вызываю groupedData.refresh (), сетка обновляется нормально.Но когда я загружаю данные и не применяю группировки (не добавляю группировки к GroupingCollection2), groupedData.Refresh () не обновляет сетку, показывая только отфильтрованные строки.Я также попытался вызвать собственный метод InvalidateList (), но безрезультатно.

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Спасибо за предложение.

Я заглянул внутрь GroupingCollection2.as:

// return if no grouping or groupingFields are supplied
        if (!grouping || grouping.fields.length < 1 )
        {
            super.source = source;
            // dispatch collection change event of kind reset.
            resetEvent =
                    new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
            resetEvent.kind = CollectionEventKind.RESET;
            dispatchEvent(resetEvent);
            return true;
        }

Так что по какой-то причине Adobe сбрасывает источник данных, если нет группировки, которая (мое мнение) это ошибка или неверное предположение.

Приведенный выше код вызывается при вызове groupingCollection.refresh(), который является единственным способом обновления дисплея на AdvancedDataGrid (о котором я знаю)

Итак, я полагаю, что обходным решением будет всегда иметь хотя бы одну группировку на AdvancedDataGrid.Немного нежелательного ограничения, хотя.

0 голосов
/ 23 июня 2011

Я думаю, это происходит потому, что filterFunction, который применялся к старому ArrayCollection, стирается при загрузке данных.Я хотел бы сделать копию старого набора ArrayCollection filterFunctionSort, если необходимо), а затем переназначить эти свойства после загрузки данных.

Вот быстрый (и не проверенный) пример:

public function loadData(myData:ArrayCollection):void
{
  var filter:Function = reportData.filterFunction;
  reportData = myData;
  reportData.filterFunction = filter;
  reportData.refresh();
}
...