<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.controls.DataGrid; import mx.managers.DragManager; import mx.core.UIComponent; import mx.collections.ArrayCollection; import mx.events.DragEvent; //DataGrid的数据源 [Bindable] private var medalsAC:ArrayCollection = new ArrayCollection( [ { Country: "美国",Gold: 35,Silver:39,bronze: 29 },{ Country: "中国",Gold: 99,Silver:17,bronze: 14 },{ Country: "日本",Gold: 32,Silver:27,bronze: 38 },{ Country: "韩国",Gold: 27,bronze: 2 },{ Country: "新加坡",Gold: 55,bronze: 63 },{ Country: "朝鲜",Gold: 11,Silver:21,bronze: 16 },{ Country: "马来西亚",Gold: 7,Silver:14,bronze: 77 },{ Country: "澳洲",Gold: 0,Silver:12,bronze: 11 } ]); //ColumnChart的数据源,默认为空 [Bindable] private var chartData:ArrayCollection = new ArrayCollection(); [Bindable] private var menu:ContextMenu = new ContextMenu(); //让columnChart监听拖拽事件 private function init():void{ column.addEventListener(DragEvent.DRAG_ENTER,dragenterHandle); column.addEventListener(DragEvent.DRAG_DROP,dragdropHandle); //初始化右键菜单 initMenu(); } //初始化chart右键菜单 private function initMenu():void { var clear:ContextMenuItem = new ContextMenuItem("清空图表"); menu.customItems.push(clear); clear.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,clearaction); } //处理鼠标右键事件 private function clearaction(event:ContextMenuEvent):void { this.chartData.removeAll(); } //因为只有DataGrid推拽,所以直接允许,如果界面上有多个控件监听拖拽事件,需要判断后允许正确的数据进入 private function dragenterHandle(e:DragEvent):void{ DragManager.acceptDragDrop(e.currentTarget as UIComponent) } //拖拽放开后处理 private function dragdropHandle(e:DragEvent):void{ //往column chart的dataprovider中添加拖拽数据。 //如果只需要特定的数据进入column chart,可以先做数据筛选。 var datas: Array = (e.dragInitiator as DataGrid).selectedItems; for(var i:int = 0; i < datas.length; i ++) { //不包含已经存在的数据再添加 if(!chartData.contains(datas[i])) { chartData.addItem(datas[i]); } } } ]]> </mx:Script> <mx:DataGrid dragEnabled="true" dataProvider="{medalsAC}" x="192" y="52" allowMultipleSelection="true"> <mx:columns> <mx:DataGridColumn datafield="Country" headerText="国家" /> <mx:DataGridColumn datafield="Gold" headerText="金牌"/> <mx:DataGridColumn datafield="Silver" headerText="银牌"/> <mx:DataGridColumn datafield="bronze" headerText="铜牌"/> </mx:columns> </mx:DataGrid> <!-- 定义颜色 --> <mx:SolidColor id="sc1" color="yellow" alpha=".8"/> <mx:SolidColor id="sc2" color="0xCCCCCC" alpha=".6"/> <mx:SolidColor id="sc3" color="0xFFCC66" alpha=".6"/> <!-- 定义颜色 --> <mx:stroke id="s1" color="yellow" weight="2"/> <mx:stroke id="s2" color="0xCCCCCC" weight="2"/> <mx:stroke id="s3" color="0xFFCC66" weight="2"/> <!--Column chart设置成能解析Country: "Russia",bronze: 38这样的数据项--> <mx:ColumnChart id="column" contextMenu="{menu}" height="202" width="402" paddingLeft="5" paddingRight="5" showdatatips="true" dataProvider="{chartData}" x="192" y="215"> <!--设置水平轴--> <mx:horizontalAxis> <!--水平轴拖动数据到chart后的文字显示--> <mx:CategoryAxis categoryField="Country" /> </mx:horizontalAxis> <!--设置柱子--> <!--fill填充颜色,stroke边框颜色--> <mx:series> <mx:ColumnSeries xField="Country" yField="Gold" displayName="金牌" fill="{sc1}" stroke="{s1}" /> <mx:ColumnSeries xField="Country" yField="Silver" displayName="银牌" fill="{sc2}" stroke="{s2}" /> <mx:ColumnSeries xField="Country" yField="bronze" displayName="铜牌" fill="{sc3}" stroke="{s3}" /> </mx:series> </mx:ColumnChart> </mx:Application>
源码下载