2011-04-13 14 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データに基づいて列を自動的に検出できるかどうか試していました。私は次のコードを試しました:

このコードを使用すると、AdvancedDataGridは自動的に列名とデータを検出します。しかし、Revenuesのネストされた列を作成することはできません。理想的にはそれがActualEstimateとしてそれのための2つのサブ列を作成する必要がありますが、それは1つの列のみと[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

+1

他のシステムを使用してデータを作成しても、それを解釈してデータに追加することはできませんあなたの選択のモデルです。もしそれがあまりにも多くの作業をしているようであれば、いつでも[labelFunctions](http://help.adobe.com/jp/FlashPlatform/reference/actionscript/3/mx/controls/advancedDataGridClasses/AdvancedDataGridColumn.html #labelFunction)、カスタム[アイテムレンダラー](http://help.adobe.com/jp/flex/using/WS03d33b8076db57b9-23c04461124bbeca597-8000.html) –

関連する問題