OLAPDataGrid コントロールの表示を制御するには、コールバック関数を使用してコントロールのセルにスタイルを適用するか、アイテムレンダラーを使用して表示を制御します。
コールバック関数を使用してセルのスタイルを制御するには、OLAPDataGrid.styleFunction プロパティを使用してコールバック関数を指定します。コールバック関数には次のシグネチャが必要です。
function_name(row:IOLAPAxisPosition, column:IOLAPAxisPosition, value:Number):Object
row は行軸上のこのセルに関連付けられている IOLAPAxisPosition で、column は列軸上のこのセルに関連付けられている IOLAPAxisPosition です。また、value はセルの値です。
この関数は、スタイルの設定を指定する 1 つまたは複数の styleName:value のペアが含まれたオブジェクトか、null を返します。styleName フィールドは、color など、スタイルプロパティの名前になります。また、value フィールドは、0x00FF00 など、スタイルプロパティの値になります。例えば、次のようなシンタックスを使用して 2 種類のスタイルを返すことができます。
{color:0xFF0000, fontWeight:"bold"}
OLAPDataGrid コントロールは、表示を更新する場合にコールバック関数を呼び出します。例えば、アプリケーションの起動時に最初に描画する場合や、invalidateList() メソッドを呼び出した場合が該当します。
次の例は、OLAPDataGrid コントロールの使用例の節で示された例を変更したもので、1000 を超える値を持つセルをすべて緑で表示するコールバック関数が追加されています。
<mx:Script>
<![CDATA[
...
// Callback function that hightlights in green
// all cells with a value greater than or equal to 1000.
public function myStyleFunc(row:IOLAPAxisPosition, column:IOLAPAxisPosition,
value:Number):Object
{
if (value >= 1000)
return {color:0x00FF00};
// Return null if value is less than 1000.
return null;
}
]]>
</mx:Script>
...
<mx:OLAPDataGrid id="myOLAPDG"
width="100%" height="100%"
styleFunction="myStyleFunc"/>
前の例で実行する SWF ファイルは以下のとおりです。
OLAPDataGrid コントロールのセルの外観と動作をカスタマイズするには、カスタムアイテムレンダラーを作成します。アイテムレンダラーとアイテムエディタの概要については、アイテムレンダラーとアイテムエディタの使用を参照してください。
OLAPDataGrid コントロールでアイテムレンダラーを使用するには、アイテムレンダラーを特定の列ではなく OLAPDataGrid コントロール自体に割り当てます。この処理には OLAPDataGrid.itemRendererProviders プロパティを使用します。itemRendererProviders プロパティには、OLAPDataGridItemRendererProvider インスタンスの配列が格納されています。各 OLAPDataGridItemRendererProvider インスタンスによって、単一のアイテムレンダラーの特性が定義されます。
アイテムレンダラーを OLAPDataGrid コントロールに割り当てるには、OLAPDataGridRendererProvider.renderer プロパティを使用します。この方法は、AdvancedDataGrid.rendererProviders プロパティを使用する方法とほとんど同じです。また、OLAPDataGridRendererProvider.formatter プロパティを使用して、フォーマッタクラスを割り当てることもできます。次の例は、OLAPDataGrid コントロールの使用例の節で示された例を変更したもので、コントロールの各セルに CurrencyFormatter フォーマッタを適用するアイテムレンダラーが追加されています。
...
<mx:CurrencyFormatter id="usdFormatter" precision="2"
currencySymbol="$" decimalSeparatorFrom="."
decimalSeparatorTo="." useNegativeSign="true"
useThousandsSeparator="true" alignSymbol="left"/>
...
<mx:OLAPDataGrid id="myOLAPDG"
width="100%" height="100%">
<mx:itemRendererProviders>
<mx:OLAPDataGridItemRendererProvider
uniqueName="[QuarterDim].[Quarter]"
type="{OLAPDataGrid.OLAP_HIERARCHY}"
formatter="{usdFormatter}"/>
</mx:itemRendererProviders>
</mx:OLAPDataGrid>
前の例で実行する SWF ファイルは以下のとおりです。
アイテムレンダラーを割り当てるには、OLAPDataGridItemRendererProvider クラスの uniqueName プロパティおよび type プロパティを使用します。uniqueName プロパティでは、アイテムレンダラーを使用して変更するクエリのエレメントを指定します。これは、OLAPDataGrid コントロールの対応するセルになります。type プロパティでは、uniqueName プロパティで指定されたエレメントのディメンション、階層またはレベルなど、エレメントタイプを指定します。
この例のクエリを定義する関数は次のとおりです。
// Create the OLAP query.
private function getQuery(cube:IOLAPCube):IOLAPQuery {
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
// Add the Product to the row to aggregate data
// by the Product dimension.
productSet.addElements(
cube.findDimension("ProductDim").findAttribute("Product").children);
// Add the OLAPSet instance to the axis.
rowQueryAxis.addSet(productSet);
// Get the column axis from the query instance, and configure it
// to aggregate the columns by the Quarter dimension.
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElements(
cube.findDimension("QuarterDim").findAttribute("Quarter").children);
colQueryAxis.addSet(quarterSet);
return query;
}
QuarterDim の軸が、QuarterDim ディメンションの Quarter 階層のクエリを作成している点に注意してください。そのため、uniqueName プロパティを [QuarterDim].[Quarter] に設定し、type プロパティを OLAPDataGrid.OLAP_HIERARCHY に設定します。この例の OLAP コードの構造について詳しくは、単純な OLAP キューブのクエリの記述を参照してください。
QuarterDim に対して次のようにクエリを指定することで、キューブをドリルダウンするようにこの例を変更することができます。
quarterSet.addElements(
cube.findDimension("QuarterDim").findHierarchy("QuarterHier").
findLevel("Quarter").members);
この場合、uniqueName プロパティおよび type プロパティを次のように変更します。
<mx:OLAPDataGrid id="myOLAPDG"
width="100%" height="100%">
<mx:itemRendererProviders>
<mx:OLAPDataGridItemRendererProvider
uniqueName="[QuarterDim].[QuarterHier].[Quarter]"
type="{OLAPDataGrid.OLAP_LEVEL}"
formatter="{usdFormatter}"/>
</mx:itemRendererProviders>
</mx:OLAPDataGrid>
前の例で実行する SWF ファイルは以下のとおりです。
この例では、QuarterDim のクエリで、OLAP キューブのディメンション、階層およびレベルを指定していることに注意してください。このため、この構造に合わせて uniqueName プロパティを変更し、type プロパティを OLAPDataGrid.OLAP_LEVEL に設定します。
OLAPDataGrid コントロールの各セルは、コントロールの行に沿ったメンバーと列に沿ったメンバーの交差領域の結果です。ただし、アイテムレンダラーを OLAPDataGrid コントロールに割り当てる場合は、1 つのディメンションの行または列に対して uniqueName プロパティおよび type プロパティを指定するだけです。そのため、コントロールの同じセルに対して、2 つの異なるアイテムレンダラーが割り当てられてしまう場合もあります。
複数のアイテムレンダラーが競合する場合、OLAPDataGrid コントロールは次の優先順位でアイテムレンダラーを適用します。
そのため、OLAPDataGrid.OLAP_LEVEL の type 値を持つアイテムレンダラーと OLAPDataGrid.OLAP_HIERARCHY の type 値を持つアイテムレンダラーが同じセルに適用されている場合、OLAPDataGrid コントロールは OLAPDataGrid.OLAP_LEVEL の type 値を持つアイテムレンダラーを適用します。
2 つのアイテムレンダラーが type プロパティに同じ値を持っている場合、OLAPDataGrid コントロールはアイテムにより近いほうを特定し、そちらを使用します。
次の例に示すように、アイテムレンダラーを使用して、OLAPDataGrid コントロールの特定のセルにスタイルを適用することができます。
<mx:Style>
.cellStyle
{
color:#ff0000;
fontWeight:"bold"
}
</mx:Style>
...
<mx:OLAPDataGrid id="myOLAPDG"
width="100%" height="100%">
<mx:itemRendererProviders>
<mx:OLAPDataGridItemRendererProvider
uniqueName="[QuarterDim].[Quarter]"
type="{OLAPDataGrid.OLAP_HIERARCHY}"
formatter="{usdFormatter}"
styleName="cellStyle"/>
</mx:itemRendererProviders>
</mx:OLAPDataGrid>
前の例で実行する SWF ファイルは以下のとおりです。
この例では、スタイル定義を作成して OLAPDataGrid コントロールのセルに適用し、CurrencyFormatter フォーマッタの場合と同じセルに適用されるようにしています。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート