我想解释我的问题的最佳方法是用hierarchical XML data example on Livedocs来描述它。
这里,XML的格式为
<Region Region="Arizona">
<Territory_Rep Territory_Rep="Barbara Jennings" Actual="38865" Estimate="40000"/>
<Territory_Rep Territory_Rep="Dana Binn" Actual="29885" Estimate="30000"/>
</Region>
但是,我的数据更像是:
<Region Region="Arizona">
<Territory_Rep Territory_Rep="Barbara Jennings">
<Actual>38865</Actual>
<Estimate>40000</Estimate>
</Territory_Rep>
<Territory_Rep Territory_Rep="Dana Binn">
<Actual>29885</Actual>
<Estimate>30000</Estimate>
</Territory_Rep>
</Region>
我会以编程方式创建列,如下所示:
var cols:Array = [];
var adgColumn:AdvancedDataGridColumn = new AdvancedDataGridColumn();
adgColumn.headerText = "Rep Name";
adgColumn.dataField = "@Territory_Rep";
cols.push(adgColumn);
adgColumn = new AdvancedDataGridColumn();
adgColumn.headerText = "Actual";
adgColumn.dataField = "Actual";
cols.push(adgColumn);
adgColumn = new AdvancedDataGridColumn();
adgColumn.headerText = "Estimate";
adgColumn.dataField = "Estimate";
cols.push(adgColumn);
grid.columns = cols;
grid.validateNow();
但是,这会导致reps显示为分支节点(即文件夹),下面有一些空的叶子节点。这显然不是我想要的 - 我需要它仍然像在示例中那样。
显然我可以通过编写一些代码来解决这个问题 - 最简单的方法是更改XML(在源代码,或者在我的Flex应用程序中使用解析器),或者解析它然后将所需的数据转储到ArrayCollection中,但是没有办法让这个开箱即用吗?鉴于我已经指示AdvancedDataGrid在一行中使用所有子元素,为什么它不能从层次结构的角度忽略它们呢?
由于AdvancedDataGrid似乎有一些其他令人讨厌的问题(例如question 3517769),我最好的选择就是创建我自己的类来完成我想要的一切吗?或者是否有一些我不知道的体面的解决方法?
干杯。
答案 0 :(得分:0)
我认为这种行为是有道理的,因为通过像你一样构建XML,你可以有另一层次的层次结构。因此,最干净的解决方案是改变它,或者如果你喜欢它,那么可能会引入一个属性来将分支标记为非分层,如下所示:
<Region Region="Arizona">
<Territory_Rep Territory_Rep="Barbara Jennings" NonHierarchial="true">
<Actual>38865</Actual>
<Estimate>40000</Estimate>
</Territory_Rep>
<Territory_Rep Territory_Rep="Dana Binn" NonHierarchial="true">
<Actual>29885</Actual>
<Estimate>30000</Estimate>
</Territory_Rep>
</Region>
并覆盖AdvancedDataGrid的解析方法以查找此属性。
编辑:您可以使用childrenField
对象中的HierarchicalData
等属性来解决这个问题,在文档中稍微挖掘一下!请参阅:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/collections/HierarchicalData.html#childrenField