主题几乎要求一切。我是flex的新手,我正在尝试做类似于这个例子http://livedocs.adobe.com/flex/3/html/help.html?content=advdatagrid_10.html的事情。如何在没有HierarchicalData的情况下使其工作?
答案 0 :(得分:3)
您还可以选择使用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();
}
答案 1 :(得分:2)
您必须使用HierarchicalData对象才能实现此行为。使用一个有什么问题?您应该能够将ArrayCollection传递给HierarchicalData对象的构造函数,然后设置它的childrenField属性并且很好。如果需要对原始数组集合进行操作,可以使用HierarchicalData的源来获取ArrayCollection,否则可以存储单独的引用。 HierarchicalData不是一个重量级的对象,只是添加了表示层次结构所需的东西。对于我们的情况,我们希望扩展行具有与原始数组集合行相同的数据,因此我们将对象上的children属性设置为包含唯一对象本身的集合,这样在行扩展原始数据时被传递到行扩展。这样的东西在我们的DTO / Value对象中: public var children:ArrayCollection;
children = new ArrayCollection([{parent:this}]);
将其设置为具有设置为此属性的新对象,因为如果您只是传递了它本身而没有在其周围包装对象并将其分配给属性,那么当您展开它时会递归尝试扩展孩子也是。然后在set data函数的实际渲染器中,我们检查parent属性并将渲染器的data属性设置为放入的数据的父级,这样一切都可以绑定到渲染器中的data属性,并且所有都是好。
让我知道这是否有帮助,或者如果你想要实现不同的东西。