问题描述
|
我正在尝试通过此链接进行示例:Adobe Flex 4 *创建列组
数据是
import mx.collections.ArrayCollection;
[Bindable]
private var dpHierarchy:ArrayCollection = new ArrayCollection([
{Region:\"Southwest\",Territory:\"Arizona\",Territory_Rep:\"Barbara Jennings\",Revenues:{Actual:38865,Estimate:40000}},{Region:\"Southwest\",Territory_Rep:\"Dana Binn\",Revenues:{Actual:29885,Estimate:30000}},Territory:\"Central California\",Territory_Rep:\"Joe Smith\",Revenues:{Actual:29134,Territory:\"Nevada\",Territory_Rep:\"Bethany Pittman\",Revenues:{Actual:52888,Estimate:45000}},Territory:\"northern California\",Territory_Rep:\"Lauren Ipsum\",Revenues:{Actual:38805,Territory_Rep:\"T.R. Smith\",Revenues:{Actual:55498,Territory:\"Southern California\",Territory_Rep:\"Alice Treu\",Revenues:{Actual:44985,Territory_Rep:\"Jane grove\",Revenues:{Actual:44913,Estimate:45000}}
]);
<?xml version=\"1.0\"?>
<s:Application xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
xmlns:mx=\"library://ns.adobe.com/flex/mx\"
xmlns:s=\"library://ns.adobe.com/flex/spark\">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
// Import the data used by the AdvancedDataGrid control.
include \"SimpleFlatData.as\";
]]>
</fx:Script>
<mx:AdvancedDataGrid id=\"myADG\"
dataProvider=\"{dpFlat}\"
width=\"100%\" height=\"100%\">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn datafield=\"Region\"/>
<mx:AdvancedDataGridColumn datafield=\"Territory\"/>
<mx:AdvancedDataGridColumn datafield=\"Territory_Rep\"
headerText=\"Territory Rep\"/>
<mx:AdvancedDataGridColumnGroup headerText=\"Revenues\">
<mx:AdvancedDataGridColumn datafield=\"Actual\"/>
<mx:AdvancedDataGridColumn datafield=\"Estimate\"/>
</mx:AdvancedDataGridColumnGroup>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
</s:Application>
在这里,我们必须定义“ 1”来定义分组的列。
我正在尝试AdvancedDataGrid是否可以基于JSON数据自动检测列。我尝试使用以下代码:
<mx:AdvancedDataGrid id=\"inBoxDg\"
designviewDataType=\"flat\"
editable=\"true\"
dataProvider=\"{dpHierarchy}\"
width=\"100%\" height=\"100%\">
</mx:AdvancedDataGrid>
使用此代码,AdvancedDataGrid自动检测列名称和数据。但是它无法为Revenues
创建嵌套列。理想情况下,它应该为其创建2个子列,分别为Actual
和Estimate
,但它仅创建一列,并且显示数据为[object Object]
。
有什么方法可以使AdvancedDataGrid自动创建嵌套列?
解决方法
您的数据并不平坦,仅仅因为您将其放在一个组中并不意味着它将对其进行分组。 dataField属性不能在其中使用点符号,因此您有2个选项,使用labelFunction属性或创建平面数据模型(我个人更喜欢后者)。
去做这个:
private var dpHierarchy:ArrayCollection = new ArrayCollection([
{Region:\"Southwest\",Territory:\"Arizona\",Territory_Rep:\"Barbara Jennings\",ActualRevenue:38865,EstimateRevenue:40000},{Region:\"Southwest\",Territory_Rep:\"Dana Binn\",Territory:\"Central California\",Territory_Rep:\"Joe Smith\",etc....
]);
然后您的网格:
<mx:AdvancedDataGrid id=\"myADG\"
dataProvider=\"{dpFlat}\"
width=\"100%\" height=\"100%\">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn dataField=\"Region\"/>
<mx:AdvancedDataGridColumn dataField=\"Territory\"/>
<mx:AdvancedDataGridColumn dataField=\"Territory_Rep\"
headerText=\"Territory Rep\"/>
<mx:AdvancedDataGridColumnGroup headerText=\"Revenues\">
<mx:AdvancedDataGridColumn dataField=\"ActualRevenue\"/>
<mx:AdvancedDataGridColumn dataField=\"EstimateRevenue\"/>
</mx:AdvancedDataGridColumnGroup>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
您也可以根据需要使用labelFunction进行查找,但这似乎比需要的复杂。最后,我觉得我应该注意,您应该在列上手动设置label属性,并遵守数据的编码标准(camelCase)。它只是使事情变得更干净:)