グループ化データはフラットなデータで、階層構造に配列して 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 フィールドを使用してツリーのリーフノードのラベルを定義しています。
この例を実装するコードは次のとおりです。
<?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 クラスの設定をデータに適用します。GroupingCollection クラスの grouping、source、または summaries の各プロパティを設定した場合など、GroupingCollection クラスに変更を加えた場合は、常にこのメソッドを呼び出す必要があります。また、caseInsensitive、compareFunction、または groupingFunction の各プロパティを変更した場合など、GroupingCollection クラスの GroupingField に変更を加えた場合も、GroupingCollection.refresh() メソッドを呼び出します。
前の例では、AdvancedDataGrid コントロールの initialize イベントに応答して、GroupingCollection.refresh() メソッドが呼び出されていることに注意してください。
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 になります。GroupingCollection クラスで作成された、デフォルトのフィールド名を使用したデータ構造の例については、グループ化データの表示を参照してください。
Grouping.label プロパティを使用して別の名前を指定すると、生成された階層構造の各レベルに対して別のグループラベルを作成することができます。
AdvancedDataGrid コントロールでは、GroupLabel フィールドを使用して、ナビゲーションツリーのブランチノードのラベルを定義します。グループ化データを表示する方法の 1 つとして、グループ化に使用するフィールドが作成する最上位レベルのデータアイテムの列を作成する方法が挙げられます。例えば、Region フィールドと Territory フィールドに基づいてフラットなデータをグループ化したとします。これらのフィールドは、ナビゲーションツリーのブランチノードのラベルとして表示されます。そのため、次の例で示すように、これらのフィールドの個別の列は省略します。
この例を作成するコードは次のとおりです。この例には 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 ファイルは以下のとおりです。
前のセクションの例では、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 コントロールに表示する方法を提供します。例えば、データの全行にわたるフィールドの平均値を含む概要データや、フィールドの最大値または最小値を含む概要データなど、様々なタイプの概要を含む概要データを追加することができます。
グループに関する概要データは、GroupingField クラスの summaries プロパティを使用して作成します。概要データは、AdvancedDataGrid コントロールの既存の行に表示することも、個別の行に表示することもできます。
次の図は、Min Actual と Max Actual という 2 つの概要フィールド表示した AdvancedDataGrid コントロールを示したものです。
一番上の行の 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 プロパティを使用しています。SUM、MIN、MAX、AVG、または 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 プロパティには、スペースで区切った複数の値を指定できます。例えば 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 ファイルは以下のとおりです。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート