【问题标题】:Flex AdvancedDataGrid HierarchicalData XML results in unwanted rowsFlex AdvancedDataGrid HierarchicalData XML 导致不需要的行
【发布时间】:2011-03-31 10:54:03
【问题描述】:

我想解释我的问题的最佳方式是用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();

但是,这会导致代表显示为分支节点(即文件夹),下面有一些空的叶节点。这显然不是我想要的 - 我需要它仍然看起来像示例中的样子。

显然我可以通过编写一些代码来解决这个问题 - 最简单的方法是更改​​ XML(无论是在源代码中,还是在我的 Flex 应用程序中使用解析器),或者对其进行解析,然后将所需的数据转储到 ArrayCollection 中,但是有没有办法让它开箱即用?鉴于我已指示 AdvancedDataGrid 使用单行上的所有子元素,为什么它不能从层次结构的角度忽略它们?

由于 AdvancedDataGrid 似乎还有一些其他烦人的问题(例如question 3517769),我最好的选择是创建自己的类来完成我想要的一切?还是有一些我不知道的体面的解决方法?

干杯。

【问题讨论】:

    标签: xml apache-flex hierarchical-data advanceddatagrid


    【解决方案1】:

    我认为这种行为是有意义的,因为您可以通过像您一样构建 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 的解析方法以查找此属性。

    编辑:您也许可以在HierarchicalData 对象中使用childrenField 之类的属性来解决这个问题,在文档中挖掘一下!见:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/collections/HierarchicalData.html#childrenField

    【讨论】:

    • 谢谢。我已经考虑过这两种解决方案——除其他外——但我希望我可能会遗漏一些简单的东西。我同意这种行为是有道理的,但遗憾的是它不能被属性覆盖。同样的“刷新时崩溃”问题。看起来我毕竟在扩展/重写/覆盖......
    • 在从头重写之前,一定要先尝试扩展和覆盖,调整这个现有的网格要容易得多,而不是意识到实现网格的所有缺陷。居然刚刚发现了点东西,一秒编辑我的答案!
    • 再次感谢。我也已经探索过您的其他建议,但这并不适合我的实施;我上面描述的方式是我实际在做的一个非常简化的例子。正如我所说,遗憾的是,所有这些东西都不是开箱即用的。毕竟,源 XML 有时是一成不变的。节点在刷新时崩溃的事实简直就是垃圾。嗯,扩展它的类...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2010-12-15
    • 2011-12-25
    相关资源
    最近更新 更多