2011-04-13 38 views
1

我是从这个链接尝试例如:Adobe Flex 4 * Creating column groups能AdvancedDataGrid自动检测的AdvancedDataGridColumnGroup

的数据是

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:"Arizona", 
        Territory_Rep:"Dana Binn", 
        Revenues:{Actual:29885, Estimate:30000}}, 
       {Region:"Southwest", Territory:"Central California", 
        Territory_Rep:"Joe Smith", 
        Revenues:{Actual:29134, Estimate:30000}}, 
       {Region:"Southwest", Territory:"Nevada", 
        Territory_Rep:"Bethany Pittman", 
        Revenues:{Actual:52888, Estimate:45000}}, 
       {Region:"Southwest", Territory:"Northern California", 
        Territory_Rep:"Lauren Ipsum", 
        Revenues:{Actual:38805, Estimate:40000}}, 
       {Region:"Southwest", Territory:"Northern California", 
        Territory_Rep:"T.R. Smith", 
        Revenues:{Actual:55498, Estimate:40000}}, 
       {Region:"Southwest", Territory:"Southern California", 
        Territory_Rep:"Alice Treu", 
        Revenues:{Actual:44985, Estimate:45000}}, 
       {Region:"Southwest", Territory:"Southern California", 
        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> 

在这里,我们必须定义AdvancedDataGridColumnGroup得到定义分组列。

我想如果AdvancedDataGrid可以自动检测基于JSON数据的列。我试着用下面的代码:

<mx:AdvancedDataGrid id="inboxDg" 
    designViewDataType="flat" 
    editable="true" 
    dataProvider="{dpHierarchy}" 
    width="100%" height="100%"> 

</mx:AdvancedDataGrid> 

使用此代码,AdvancedDataGrid自动检测列名和数据。但它无法为Revenues创建嵌套列。理想情况下,应该创建2分列其为ActualEstimate,但只创建一个列和显示数据[object Object] AdvancedDataGrid with auto-detect columns

有没有什么办法让AdvancedDataGrid自动创建嵌套列?

回答

2

你的数据并不平坦,只是因为你把它放在一个组中并不意味着它会对它进行分组。 dataField属性不能在其中使用点符号,所以你有2个选项,使用labelFunction属性,或创建一个平面数据模型(我个人更喜欢后者)。

要做到这一点:

private var dpHierarchy:ArrayCollection = new ArrayCollection([ 
       {Region:"Southwest", Territory:"Arizona", 
        Territory_Rep:"Barbara Jennings", 
        ActualRevenue:38865, 
        EstimateRevenue:40000}, 
       {Region:"Southwest", Territory:"Arizona", 
        Territory_Rep:"Dana Binn", 
        ActualRevenue:38865, 
        EstimateRevenue:40000}, 
       {Region:"Southwest", Territory:"Central California", 
        Territory_Rep:"Joe Smith", 
        ActualRevenue:38865, 
        EstimateRevenue:40000}, 
       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,如果你愿意,但似乎比它需要更复杂是。最后我觉得我应该注意到,您应该在列上手动设置标签属性,并遵守数据编码标准(camelCase)。它只是让事情有点清洁:)

+0

感谢您的回复。但问题是,将使用另一个系统创建数据,并决定它将采用嵌套格式。所以,创建平面模型是没有问题的。 :(我们是否可以修改AdvancedDataGrid,使其将嵌套的*对象*解释为嵌套列? – Garbage 2011-04-13 12:53:49

+1

即使使用其他系统创建数据并不意味着您无法解释它并将其添加到数据如果这似乎工作太多,你可以随时查看[labelFunctions](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/advancedDataGridClasses/AdvancedDataGridColumn.html #labelFunction),甚至可以使用自定义[项目渲染器](http://help.adobe.com/en_US/flex/using/WS03d33b8076db57b9-23c04461124bbeca597-8000.html) – 2011-04-13 12:58:47