我想解释我的问题的最好方法是用hierarchical XML data example on Livedocs来描述它。Flex AdvancedDataGrid HierarchicalData XML导致不需要的行
这里,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)是我最好的选择,只是创建我自己的类,做我想做的所有事情?还是有一些体面的解决方法,我不知道?
干杯。
谢谢。我已经考虑过这两个解决方案 - 其中包括 - 但有希望我可能会错过简单的东西。我同意这种行为是有道理的,但它不能被财产重写。同样的'刷新崩溃'问题。看起来我正在扩展/重写/重写... – Marc 2011-03-31 11:50:04
绝对要在从头开始重写之前先尝试扩展和覆盖,更容易调整这个现有的网格,而不是意识到实现它的所有缺陷。其实只是找到了一些东西,在一秒之内编辑我的答案! – dain 2011-03-31 12:10:00
再次感谢。我也已经探索过你的其他建议,但它不适合我的实施;我上面描述的方式是我实际做的一个非常简单的例子。正如我所说,所有这些东西都不可配置开箱是令人遗憾的;毕竟,源XML有时是成立的。事实上,节点在刷新时崩溃只是普通的垃圾。啊,延长课程是... – Marc 2011-03-31 12:20:05