Adobe Flex 3 ヘルプ

グループ化データの表示

グループ化データはフラットなデータで、階層構造に配列して AdvancedDataGrid コントロールに表示します。データをグループ化するには、データを階層構造にまとめるために使用する 1 つまたは複数のデータフィールドを指定します。

AdvancedDataGrid コントロールにグループ化データを設定するには、まずフラットなデータから GroupingCollection クラスのインスタンスを作成し、その GroupingCollection インスタンスを AdvancedDataGrid コントロールのデータプロバイダに渡します。フラットなデータから GroupingCollection のインスタンスを作成する際は、そのデータの中で、階層構造を作成するために使用するフィールドを指定します。

このセクションのほとんどの例では、次のフラットなデータを使用して GroupingCollection クラスのインスタンスを作成しています。

[Bindable]
private var dpFlat:ArrayCollection = new ArrayCollection([
  {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
  {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},  
  {Region:"Southwest", Territory:"Central California", 
      Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},  
  {Region:"Southwest", Territory:"Nevada", 
      Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},  
  {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
  {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},  
  {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
  {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
]);

次の図は、このデータを出力として使用する AdvancedDataGrid コントロールを示したものです。この例では、データのグループ化に使用するフィールドとして、Region および Territory の 2 つのフィールドを指定しています。AdvancedDataGrid コントロールの最初の列は Region フィールドに関連付けられているので、ナビゲーションツリーは Region フィールドを使用してツリーのリーフノードのラベルを定義しています。

å¬ïþÇÃóÒÇ…ì¸ÇÍÇÁÇÍǾÉiÉrÉQÅ[ÉVÉáÉìÉcÉäÅ[

この例を実装するコードは次のとおりです。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleGroupADGMXML.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as"
        ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:grouping>
                    <mx:Grouping>
                        <mx:GroupingField name="Region"/>
                        <mx:GroupingField name="Territory"/>
                    </mx:Grouping>
                </mx:grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

GroupingCollection インスタンスは、これらのフィールドに基づいてデータを再フォーマットしているので、内部的には GroupingCollection インスタンスによって次の例のように表現されます。

[{GroupLabel:"Southwest", children:[
    {GroupLabel:"Arizona", children:[
      {Region:"Southwest", Territory:"Arizona", 
        Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
      {Region:"Southwest", Territory:"Arizona", 
        Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000}]}  
    {GroupLabel:"Central California", children:[
      {Region:"Southwest", Territory:"Central California", 
        Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000}]}
    {GroupLabel:"Nevada", children:[
      {Region:"Southwest", Territory:"Nevada",  
        Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000}]}
    {GroupLabel:"Northern California", children:[
      {Region:"Southwest", Territory:"Northern California", 
        Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
      {Region:"Southwest", Territory:"Northern California", 
        Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000}]}
    {GroupLabel:"Southern California", children:[
      {Region:"Southwest", Territory:"Southern California", 
        Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
      {Region:"Southwest", Territory:"Southern California", 
        Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}]}
]}]

この表現が、フラットなデータの Region および Territory フィールドに基づいたデータ階層で構成されていることに注意してください。GroupingCollection インスタンスは、入力されたフラットなデータの元の行を保持しています。ただし、これらの行はグループ化に使用するフィールドに基づいて階層構造に配列されています。

GroupingCollection.refresh() メソッドの呼び出し

GroupingCollection.refresh() メソッドは、GroupingCollection クラスの設定をデータに適用します。GroupingCollection クラスの groupingsource、または summaries の各プロパティを設定した場合など、GroupingCollection クラスに変更を加えた場合は、常にこのメソッドを呼び出す必要があります。また、caseInsensitivecompareFunction、または groupingFunction の各プロパティを変更した場合など、GroupingCollection クラスの GroupingField に変更を加えた場合も、GroupingCollection.refresh() メソッドを呼び出します。

前の例では、AdvancedDataGrid コントロールの initialize イベントに応答して、GroupingCollection.refresh() メソッドが呼び出されていることに注意してください。

GroupingCollection クラスのデフォルトの MXML プロパティの使用

grouping プロパティは、GroupingCollection クラスのデフォルトの MXML プロパティです。前の例は、次のように書き換えることができます。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleGroupADGMXMLDefaultProp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as"
        ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                    <mx:Grouping>
                        <mx:GroupingField name="Region"/>
                        <mx:GroupingField name="Territory"/>
                    </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

GroupLabel フィールドの名前の設定

デフォルトでは、階層構造を作成するためにフラットなデータに追加されたデータアイテムのフィールド名は GroupLabel になります。GroupingCollection クラスで作成された、デフォルトのフィールド名を使用したデータ構造の例については、グループ化データの表示を参照してください。

Grouping.label プロパティを使用して別の名前を指定すると、生成された階層構造の各レベルに対して別のグループラベルを作成することができます。

GroupLabel フィールドの列の作成

AdvancedDataGrid コントロールでは、GroupLabel フィールドを使用して、ナビゲーションツリーのブランチノードのラベルを定義します。グループ化データを表示する方法の 1 つとして、グループ化に使用するフィールドが作成する最上位レベルのデータアイテムの列を作成する方法が挙げられます。例えば、Region フィールドと Territory フィールドに基づいてフラットなデータをグループ化したとします。これらのフィールドは、ナビゲーションツリーのブランチノードのラベルとして表示されます。そのため、次の例で示すように、これらのフィールドの個別の列は省略します。

ÉOÉãÅ[ÉvâªÇ…égópDzÇÈÉtÉBÅ[ÉãÉhÇ™çÏê¨Ç²ÇÈçÝè„àþÉåÉxÉãÇÃÉfÅ[É^ÉAÉCÉeÉÄÇÃóÒÇšçÏê¨ÇµÇ‹Ç²

この例を作成するコードは次のとおりです。この例には GroupLabel フィールドの AdvancedDataGridColumn インスタンスが含まれていて、Region フィールドと Territory フィールドの列定義は含まれていないことに注意してください。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleGroupADGGroupLabelMXML.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as";
        ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%"
        defaultLeafIcon="{null}" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:Grouping>
                    <mx:GroupingField name="Region"/>
                    <mx:GroupingField name="Territory"/>
                </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="GroupLabel" 
                headerText="Region/Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

ActionScript でのグループの作成

前のセクションの例では、MXML でグループを作成しました。ただし、実行時にグループ化を定義することをユーザーに対して許可することもできます。次の例では、イベントハンドラを使用して、ActionScript でグループを作成しています。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleGroupADG.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
      <![CDATA[
        import mx.collections.GroupingField;
        import mx.collections.Grouping;
        import mx.collections.GroupingCollection;
        import mx.collections.ArrayCollection;
                  
        include "SimpleFlatData.as";

        [Bindable]
        public var myGColl:GroupingCollection = new GroupingCollection();
        
        private var myGrp:Grouping = new Grouping();

        private function initDG():void {     

            // Initialize the GroupingCollection instance.
            myGColl.source = dpFlat;
                        
            // The Grouping instance defines the grouping fields
            // in the collection, and the order of the groups 
            // in the hierarchy.
            myGrp.fields = 
              [new GroupingField("Region"), new GroupingField("Territory")];
            
            // The grouping property contains a Grouping instance.
            myGColl.grouping = myGrp;

            // Specify the GroupedCollection as the data provider for 
            // the AdvancedDataGrid control.
            myADG.dataProvider=myGColl;
            
            // Refresh the display.
            myGColl.refresh();
        }        
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        creationComplete="initDG();">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

概要行の作成

概要データは、データから情報を抽出し、AdvancedDataGrid コントロールに表示する方法を提供します。例えば、データの全行にわたるフィールドの平均値を含む概要データや、フィールドの最大値または最小値を含む概要データなど、様々なタイプの概要を含む概要データを追加することができます。

注意: HierarchicalData クラスで表現される階層データでは、概要データはサポートされていません。概要データは、GroupingCollection クラスで表現されるデータに対してのみ作成できます。

グループに関する概要データは、GroupingField クラスの summaries プロパティを使用して作成します。概要データは、AdvancedDataGrid コントロールの既存の行に表示することも、個別の行に表示することもできます。

次の図は、Min Actual と Max Actual という 2 つの概要フィールド表示した AdvancedDataGrid コントロールを示したものです。

Min Actual Çý Max Actual ÇýǢǧ 2 ǬÇÃäTóvÉtÉBÅ[ÉãÉhï\é¶ÇµÇ¾ AdvancedDataGrid ÉRÉìÉgÉçÅ[Éã

一番上の行の Min Actual フィールドと Max Actual フィールドは、グループのすべての行の概要に対応しています。また、各 Territory の Min Actual フィールドと Max Actual フィールドは、Territory サブグループのすべての行の概要に対応しています。

このコントロールを作成するコードは次のとおりです。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SummaryGroupADG.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as"
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:Grouping>
                    <mx:GroupingField name="Region">
                        <mx:summaries>
                          <mx:SummaryRow summaryPlacement="group">
                            <mx:fields>
                                <mx:SummaryField dataField="Actual" 
                                    label="Min Actual" operation="MIN"/>
                                <mx:SummaryField dataField="Actual" 
                                    label="Max Actual" operation="MAX"/>
                            </mx:fields>
                          </mx:SummaryRow>
                        </mx:summaries>
                    </mx:GroupingField>
                    <mx:GroupingField name="Territory">
                        <mx:summaries>
                          <mx:SummaryRow summaryPlacement="group">
                            <mx:fields>
                                <mx:SummaryField dataField="Actual" 
                                    label="Min Actual" operation="MIN"/>
                                <mx:SummaryField dataField="Actual" 
                                    label="Max Actual" operation="MAX"/>
                            </mx:fields>
                          </mx:SummaryRow>
                        </mx:summaries>
                    </mx:GroupingField>
                </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
            <mx:AdvancedDataGridColumn dataField="Min Actual"/>
            <mx:AdvancedDataGridColumn dataField="Max Actual"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

この例では、GroupingField.summaries プロパティを使用して SummaryRow インスタンスを指定している点に注意してください。SummaryRow インスタンスには、データの概要に関するすべての情報が含まれます。この例では、summaryPlacement プロパティを使用して、グループ化データに概要データを追加しています。また、概要データを含む新しい行を追加することもできます。詳細については、AdvancedDataGrid コントロールでの概要データの表示位置の指定を参照してください。

各 SummaryRow インスタンスでは、データの概要を作成する 1 つまたは複数の SummaryField インスタンスを指定します。この例では、dataField プロパティを使用することで、概要が Actual データフィールドのデータによって決定されることを指定しています。また、概要データを保持するために作成されるデータフィールドの名前の指定には label プロパティを使用し、数値フィールドの概要を作成する方法の指定には operation プロパティを使用しています。SUMMINMAXAVG、または COUNT のいずれか 1 つを指定できます。

内部的には、次の例に示すように、GroupingCollection は、新たな概要データフィールドを加えてグループ化データを表現します。

[{GroupLabel:"Southwest", Max Actual:55498, Min Actual:29134, children:[
  {GroupLabel:"Arizona", Max Actual:38865, Min Actual:29885, children:[
    {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
    {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000}]}  
  {GroupLabel:"Central California", Max Actual:29134, Min Actual:29134, children:[
    {Region:"Southwest", Territory:"Central California", 
      Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000}]}
  {GroupLabel:"Nevada", Max Actual:52888, Min Actual:52888, children:[
    {Region:"Southwest", Territory:"Nevada",  
      Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000}]}
  {GroupLabel:"Northern California", Max Actual:55498, Min Actual:38805, children:[
    {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
    {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000}]}
  {GroupLabel:"Southern California", Max Actual:44985, Min Actual:44913, children:[
    {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
    {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}]}
]}]

GroupingField クラスおよび SummaryRow クラスのデフォルトプロパティの使用

GroupingField.summaries プロパティは GroupingField クラスのデフォルトプロパティであり、SummaryRow.fields プロパティは SummaryRow クラスのデフォルトプロパティです。そのため、前の例ではこれらのプロパティをコードから省略し、次の例のように書き換えることができます。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SummaryGroupADGDefProp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as"
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:Grouping>
                    <mx:GroupingField name="Region">
                          <mx:SummaryRow summaryPlacement="group">
                                <mx:SummaryField operation="MIN" 
                                    dataField="Actual" label="Min Actual"/>
                                <mx:SummaryField operation="MAX" 
                                    dataField="Actual" label="Max Actual"/>
                          </mx:SummaryRow>
                    </mx:GroupingField>
                    <mx:GroupingField name="Territory">
                          <mx:SummaryRow summaryPlacement="group">
                                <mx:SummaryField operation="MIN" 
                                    dataField="Actual" label="Min Actual"/>
                                <mx:SummaryField operation="MAX" 
                                    dataField="Actual" label="Max Actual"/>
                          </mx:SummaryRow>
                    </mx:GroupingField>
                </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
            <mx:AdvancedDataGridColumn dataField="Min Actual"/>
            <mx:AdvancedDataGridColumn dataField="Max Actual"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

AdvancedDataGrid コントロールでの概要データの表示位置の指定

SummaryRow クラスには、AdvancedDataGrid コントロールでの概要データの表示位置を決定する summaryPlacement プロパティが用意されています。次の表では、summaryPlacement プロパティの値について説明します。

summaryPlacement プロパティの値

説明

first

グループの最初の行として概要行を作成します。

last

グループの最後の行として概要行を作成します。

group

グループに対応する行に概要データを追加します。

概要行の作成には、summaryPlacement プロパティの値として group を指定し、グループに追加された概要データの例が示されています。次の例では、同じグループ化データを使用しますが、summaryPlacement プロパティを last に設定します。

summaryPlacement ÉvÉçÉpÉeÉBÇš last Ç…ê›íËǵǾÉOÉãÅ[ÉvâªÉfÅ[É^

summaryPlacement プロパティには、スペースで区切った複数の値を指定できます。例えば last group は、概要をグループレベルで表示し、グループの最後の行として表示することを指定する値です。

内部的には、次の例に示すように、GroupingCollection は、新たな概要データフィールドを加えてグループ化データを表現します。

[{GroupLabel:"Southwest", children:[
  {GroupLabel:"Arizona", children:[
    {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
    {Region:"Southwest", Territory:"Arizona", 
      Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},  
    {Max Actual:38865, Min Actual:29885}]}   
  {GroupLabel:"Central California", children:[
    {Region:"Southwest", Territory:"Central California", 
      Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},
    {Max Actual:29134, Min Actual:29134}]}
  {GroupLabel:"Nevada", children:[
    {Region:"Southwest", Territory:"Nevada",  
      Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},
    {Max Actual:52888, Min Actual:52888}]}
  {GroupLabel:"Northern California", children:[
    {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
    {Region:"Southwest", Territory:"Northern California", 
      Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},
    {Max Actual:55498, Min Actual:38805}]}
  {GroupLabel:"Southern California", children:[
    {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
    {Region:"Southwest", Territory:"Southern California", 
      Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000},
    {Max Actual:44985, Min Actual:44913}]}
  {Max Actual:55498, Min Actual:29134}    
]}]

概要データを保持するためにグループ全体に新しい行が追加され、その行を各サブグループに追加することで各サブグループの概要データを保持していることに注意してください。

複数の概要の作成

単一の GroupingField インスタンスに、複数の SummaryRow インスタンスを指定することができます。次の例では、Region グループの Min Actual、Max Actual、Min Estimate、および Max Estimate の各フィールドを定義する概要データを作成します。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SummaryGroupADGMultipleSummaries.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
                  
            include "SimpleFlatData.as"
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:Grouping>
                    <mx:GroupingField name="Region">
                          <mx:SummaryRow summaryPlacement="group">
                                <mx:SummaryField operation="MIN" 
                                   dataField="Actual" label="Min Actual"/>
                                <mx:SummaryField operation="MAX" 
                                   dataField="Actual" label="Max Actual"/>
                          </mx:SummaryRow>
                          <mx:SummaryRow summaryPlacement="group">
                                <mx:SummaryField operation="MIN" 
                                   dataField="Estimate" label="Min Estimate"/>
                                <mx:SummaryField operation="MAX" 
                                   dataField="Estimate" label="Max Estimate"/>
                          </mx:SummaryRow>
                    </mx:GroupingField>
                    <mx:GroupingField name="Territory"/>
                </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
            <mx:AdvancedDataGridColumn dataField="Min Actual"/>
            <mx:AdvancedDataGridColumn dataField="Max Actual"/>
            <mx:AdvancedDataGridColumn dataField="Min Estimate"/>
            <mx:AdvancedDataGridColumn dataField="Max Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

カスタム概要関数の作成

アプリケーションにカスタムの概要ロジックを追加するには、SummaryRow.summaryObjectFunction プロパティおよび SummaryField.summaryFunction プロパティを使用します。カスタムの概要では、様々なアクションを実行できます。ただし、概要の計算結果は Number 型の値でなければなりません。

SummaryRow.summaryObjectFunction プロパティでは、概要データを収集する SummaryObject クラスのインスタンスを定義するコールバック関数を定義します。AdvancedDataGrid コントロールは、データプロバイダに SummaryObject インスタンスを追加して、コントロールに概要データを表示します。そのため、SummaryObject インスタンスの範囲内で、表示するプロパティを定義します。次の例では、コールバック関数によって Territory_Rep という名前のプロパティが追加されています。このフィールドは、概要行のコントロールの Territory Rep 列に表示されます。

概要の計算を実行するコールバック関数は、SummaryField.summaryFunction プロパティで定義します。このコールバック関数は、概要を含む Number 型の値を返さなければなりません。この Number 型の値は、概要が計算されたフィールドに対応する列の概要行に表示されます。

次の例では、summaryObjectFunction プロパティおよび summaryFunction プロパティに対するコールバック関数を実装し、各地域の 1 行おきの実売上高について概要を計算します。

<?xml version="1.0"?>
<!-- dpcontrols/adg/SummaryGroupADGCustomSummary.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            import mx.collections.IViewCursor;     
            import mx.collections.SummaryObject;
                  
            include "SimpleFlatData.as"
        
            // Callback function to create 
            // the SummaryObject used to hold the summary data.
            private function summObjFunc():SummaryObject {
            
                // Define the object containing the summary data.
                var obj:SummaryObject = new SummaryObject();
                // Add a field containing a value for the Territory_Rep column.
                obj.Territory_Rep = "Alternating Reps";
                
                return obj;
            }
            
            // Callback function to summarizes 
            // every other row of the Actual sales revenue for the territory.
            private function summFunc(cursor:IViewCursor, dataField:String, 
                operation:String):Number {
                
                var oddCount:Number = 0;
                var count:int = 1;
                while (!cursor.afterLast)
                {
                    if (count % 2 != 0)
                        oddCount += cursor.current["Actual"];
                        
                    cursor.moveNext();
                    count++;
                }
                
                return oddCount;
            }
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="myADG" 
        width="100%" height="100%" 
        initialize="gc.refresh();">        
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:Grouping>
                   <mx:GroupingField name="Region"/>
                   <mx:GroupingField name="Territory">
                      <mx:summaries>
                         <mx:SummaryRow summaryObjectFunction="summObjFunc" 
                            summaryPlacement="first">
                            <mx:fields>
                               <mx:SummaryField dataField="Actual" summaryFunction="summFunc"/>
                            </mx:fields>
                         </mx:SummaryRow>
                      </mx:summaries>
                   </mx:GroupingField>
                </mx:Grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        
        
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
   </mx:AdvancedDataGrid>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート