Во флексе я могу расширить строку AdvancedDataGrid без использования HierarchicalData? - PullRequest
0 голосов
/ 04 августа 2011

Субъект в значительной степени спрашивает все это. Я новичок, чтобы сгибать, и я пытаюсь сделать что-то похожее на этот пример http://livedocs.adobe.com/flex/3/html/help.html?content=advdatagrid_10.html. Как мне заставить это работать без HierarchicalData?

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

У вас также есть возможность использования GroupingCollection . По сути, это будет группировать похожие элементы на основе общего атрибута этих элементов. Если вы используете Flex 4, используйте GroupingCollection2, он имеет несколько улучшений производительности.

<mx:AdvancedDataGrid id="adg" initialize="{gc.refresh()}"
                         width="100%" height="100%">
        <mx:dataProvider>
            <mx:GroupingCollection id="gc">
                <mx:Grouping>
                    <mx:GroupingField name="type" />
                </mx:Grouping>
                <mx:source>
                    <s:ArrayCollection>
                        <fx:Object name="Shaggy" type="dog" />
                        <fx:Object name="Scooby" type="human" />
                        <fx:Object name="Fred" type="human" />
                        <fx:Object name="Thelma" type="human" />
                        <fx:Object name="Scrappy" type="dog" />
                    </s:ArrayCollection>
                </mx:source>
            </mx:GroupingCollection>
        </mx:dataProvider>
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="name" headerText="Name"/>
        </mx:columns>
    </mx:AdvancedDataGrid>

Не забудьте вызвать gc.refresh () при инициализации, а также при каждом обновлении вашего провайдера данных.

public function set theDataProvider(ac:ArrayCollection):void{
    _theDataProvider = ac;
    gc.refresh();
}
2 голосов
/ 04 августа 2011

Вы должны использовать объект HierarchicalData для достижения этого поведения. В чем проблема с его использованием? Вы должны быть в состоянии передать ArrayCollection в конструктор объекта HierarchicalData, затем установить его свойство childrenField и быть готовым к работе. Если вам нужно работать с исходной коллекцией массивов, вы можете либо использовать источник HierarchicalData для возврата ArrayCollection, либо вы можете сохранить отдельную ссылку на него. HierarchicalData не является тяжелым объектом и просто добавляет вещи, необходимые для представления иерархии. В нашем случае мы хотели, чтобы в строках расширения были те же данные, что и в исходной строке коллекции массивов, поэтому мы установили свойство children объекта, чтобы иметь коллекцию, содержащую только сам объект, таким образом, когда строка расширяет исходные данные передается в расширение строки. Примерно так в наших DTO / объектах Value: public var children: ArrayCollection;

children = new ArrayCollection ([{parent: this}]);

установка для него нового объекта со свойством, для которого установлено это, работает, потому что, если вы просто передали это сам, не оборачивая объект вокруг него и не присвоив его свойству, то при расширении он будет рекурсивно пытаться расширить ребенок тоже. Затем в фактическом рендере в функции set data мы проверяем родительское свойство и устанавливаем свойство data рендерера в качестве родительского для сброшенных данных, таким образом, все может быть связано со свойством data в рендере, и все хорошо.

Дайте мне знать, если это помогает или вы пытаетесь достичь чего-то другого.

...