データグリッドでの合計値の表示
データグリッドで合計値を表示してみました。
http://moeten.info/flex/20080708_rakutenShop3/bin-release/main.html
こつとしてはデータグリッドの更新を検出したら合計値を再計算します。
<mx:DataGrid updateComplete="calSum()">
合計値の計算
datagrid の分だけ for 文を回してあげればOK
private function calSum():void{ if( dg2.dataProvider ){ var dp2:ArrayCollection = dg2.dataProvider as ArrayCollection; var sum:int = 0; var len:int = dp2.length; for( var i:int = 0 ; i < len ; i ++ ){ sum += dp2[i].price; } mySum.text = "" + sum + "円"; } }
おまけでアドバンストデータグリッドでもやってみました。
サマリーを使えばOKです。サマリーは oparation にて合計値や平均値を出すことが可能です。
AdvancedDataGrid なソースはこちら
<mx:Script> <![CDATA[ private function formatSummary(data:Object, col:AdvancedDataGridColumn):Object{ if (data.hasOwnProperty("summary")){ return { color:0xFF0000, fontWeight:"bold", fontSize:12 }; } return {}; } //SUM、MIN、MAX、AVG、COUNT private function flatSummaryObject():Object{ return { title:"合計", summary:true }; } private function flatSummaryObject2():Object{ return { title:"平均", summary:true }; } private function flatSummaryObject3():Object{ return { title:"最大", summary:true }; } private function flatSummaryObject4():Object{ return { title:"最小", summary:true }; } private function flatSummaryObject5():Object{ return { title:"個数", summary:true }; } ]]> </mx:Script> <mx:AdvancedDataGrid id="adg" creationComplete="groupedData.refresh();adg.dataProvider.showRoot=false" groupItemRenderer="mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer" dropEnabled="true" x="462" y="571" width="369" height="200" styleFunction="formatSummary"> <mx:dataProvider> <mx:GroupingCollection id="groupedData" source="{dg2.dataProvider}" > <mx:Grouping> <mx:GroupingField > <mx:summaries> <mx:SummaryRow summaryPlacement="last" summaryObjectFunction="flatSummaryObject"> <mx:fields> <mx:SummaryField dataField="price" operation="SUM" /> </mx:fields> </mx:SummaryRow> <mx:SummaryRow summaryPlacement="last" summaryObjectFunction="flatSummaryObject2"> <mx:fields> <mx:SummaryField dataField="price" operation="AVG"/> </mx:fields> </mx:SummaryRow> <mx:SummaryRow summaryPlacement="last" summaryObjectFunction="flatSummaryObject3"> <mx:fields> <mx:SummaryField dataField="price" operation="MAX"/> </mx:fields> </mx:SummaryRow> <mx:SummaryRow summaryPlacement="last" summaryObjectFunction="flatSummaryObject4"> <mx:fields> <mx:SummaryField dataField="price" operation="MIN"/> </mx:fields> </mx:SummaryRow> <mx:SummaryRow summaryPlacement="last" summaryObjectFunction="flatSummaryObject5"> <mx:fields> <mx:SummaryField dataField="price" operation="COUNT"/> </mx:fields> </mx:SummaryRow> </mx:summaries> </mx:GroupingField> </mx:Grouping> </mx:GroupingCollection> </mx:dataProvider> <mx:groupedColumns> <mx:AdvancedDataGridColumn headerText = "title" dataField="title"/> <mx:AdvancedDataGridColumn headerText = "price" dataField="price" width="100" /> </mx:groupedColumns> </mx:AdvancedDataGrid> <mx:Button x="663" click="{groupedData.refresh();}" y="779" label="データグリッド更新(合計表示)"/>