Flex AdvancedDataGrid HierarchicalData XML会导致不需要的行

时间:2011-03-31 10:54:04

标签: xml flex hierarchical-data advanceddatagrid

我想解释我的问题的最佳方法是用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),我最好的选择就是创建我自己的类来完成我想要的一切吗?或者是否有一些我不知道的体面的解决方法?

干杯。

1 个答案:

答案 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