/** * ==========初始化LineChart=========== * @param app 是主程序入口:dynamicStackedChart * @param id 设置id:String * @param tipStr 用户自定义的笔触提示信息:String * @param xml 数据集:String * @param title 竖向标题:String * @param vtitle 横向标题:String * @param x x轴显示信息:String * */ public function createLinkChart(app:dynamicStackedChart,id:String,tipStr:String,xml:String,title:String,vtitle:String,x:String):void{ /**初始化LineChart*/ lineChartTip=tipStr; var lineChart:LineChart=new LineChart(); lineChart.id=id; lineChart.percentWidth=100; lineChart.setStyle("textAlign","center"); lineChart.dataTipFunction=fxLineChartTips; lineChart.showDataTips=true; lineChart.height=250; /** * 点击Item事件 * */ lineChart.addEventListener(ChartItemEvent.ITEM_CLICK, function chartClick(evt:ChartItemEvent):void{lineChartItemClick(evt,app,tipStr,lineChart);}); var lineAxis:LinearAxis=new LinearAxis(); lineChart.verticalAxis=lineAxis; var lineVTitle:CategoryAxis=new CategoryAxis(); lineChart.horizontalAxis=lineVTitle; /**设置标题和设置Legend显示数据*/ lineAxis.title=title; lineVTitle.title=vtitle; lineVTitle.categoryField="@"+x; //Legend /**LineChart设置背景网格*/ lineChartbackgroundElements(lineChart); lineChartLoadData(lineChart,xml,title,vtitle,x); /**LineChart的Legend 数据*/ var lineLegend:Legend=new Legend(); lineLegend.dataProvider=lineChart; lineLegend.height=28; app.myBox.addChild(lineChart); app.myBox.addChild(lineLegend); } /**LineChart 设置背景网格*/ private function lineChartbackgroundElements(lineChart:LineChart):void{ // var gl:GridLines=new GridLines(); // gl.setStyle("horizontalTickAligned",true); // gl.setStyle("verticalTickAligned",true); // // var hr:HorizontalList; // lineChart.backgroundElements=[hr]; } /** * LineChart 加载数据 * 2010年6月17日13:37 * 页面加载LineChart数据 * @param app 主程序入口类型stackedChart * @param xml 存放数据源 String * @param title 竖向标题 String * @param vtitle 横向标题 String * @param x x轴显示数据 String * */ private function lineChartLoadData(lineChart:LineChart,x:String):void{ var xmls:XML=new XML(xml); // 绑定数据 lineChart.dataProvider=xmls.children(); // 动态添加lineSeries var xmlName:XMLList=xmls.children() as XMLList; // 获取XML中元素名称 var arr:Array=new Array(); for(var a:int=1;a<xmlName[0].attributes().length();a++) { arr.push(xmlName.attributes()[a].name().toString().replace(/^\s*|\s*$/g,"").split(" ").join("")); } var arrSeries:Array=new Array(); var colorArr:Array=getRandomColor(arr.length); for(var i:Number=0;i<arr.length;i++) { var lineSeries:LineSeries = new LineSeries(); lineSeries.id = i as String; lineSeries.yField="@"+arr[i]; lineSeries.displayName=arr[i]; var fa2:Fade=new Fade(); fa2.duration=2000; fa2.alphaFrom=0.0; fa2.alphaTo=1.0; lineSeries.setStyle("showDataEffect",fa2); lineSeries.filters=[_DropShadowFilter]; lineSeries.setStyle("itemRenderer",new ClassFactory(CircleItemRenderer)); var storkt:SolidColorStroke=new SolidColorStroke(); //随机生成颜色colorArr[i] storkt.color=colorArr[i]; storkt.weight=1; lineSeries.setStyle("lineStroke",storkt); arrSeries.push(lineSeries); } lineChart.series = arrSeries; } /** * 2010年6月17日13:37 * LineChart提示信息 * @param hitdata 存放鼠标笔触点显示数据 HitData * */ private function fxLineChartTips(hitdata:HitData):String{ var show:String=new String(""); var curObj:Object=hitdata.item; var xml:XML=new XML(curObj); var curSeries:LineSeries = LineSeries(hitdata.chartItem.element); // 获得当前的BarSeries /**提示信息*/ var arrs:Array=(lineChartTip.split(";")); for(var a:int=0;a<arrs.length;a++){ var arr1:Array=arrs[a].toString().split("="); if(a==0) { show=show+arr1[1]+":"+xml.attribute(arr1[0])+"\n"; }else if(a!=arrs.length-1){ if(arr1[0]==curSeries.displayName.toString()) { show=show+arr1[1]+":"+arr1[0]+"\n"; } }else{ show=show+arr1[1]+":"+xml.attribute(curSeries.displayName).toString(); } } return show; } /** * 2010年6月17日13:37 * 页面加载ColumnChart数据 * @param app 主程序入口类型stackedChart * @param xml 数据源 String * @param title 竖向标题 String * @param vtitle 横向标题 String * @param x x轴显示数据 String * * */ public function fxColumnChartLoader(app:dynamicStackedChart,colChart:ColumnChart,x:String):void{ /**字符创格式XML转换成XML格式*/ var xmlData:XML=new XML(xml); /**XML格式转换成XMLList*/ var xmlName:XMLList=xmlData.children() as XMLList; /** * 获取XML中每条数据的元素<day dval='12日' val="23" val2="33"/> * 格式必须是这个格式,第一个元素必须是描述字符串 * 从第二个开始为要显示的数据 * 下面是从第一个元素也就是排除第一个元素 * dval,而是从第二个元素val * 开始获取要显示的数据必须是数字 * */ var arr:Array=new Array(); for(var a:int=0;a<xmlName[0].attributes().length();a++) { arr.push(xmlName.attributes()[a].name().toString().replace(/^\s*|\s*$/g,"").split(" ").join("")); } /** * 动态添加ColumnSeries(柱子) * */ var arrcSeries:Array=new Array(); for(var f:Number=1;f<arr.length;f++) { var columnSeries:ColumnSeries = new ColumnSeries(); /**设定id*/ columnSeries.id = f as String; /**设定x轴显示数据*/ columnSeries.xField="@"+x; /**设定y轴显示数据*/ columnSeries.yField="@"+arr[f]; /**设置每个column展现效果*/ columnSeries.setStyle("showDataEffect",app.upColumn2); /** * 设置columnSeries的显示名称(displayName) * */ columnSeries.displayName=arr[f]; arrcSeries.push(columnSeries); /**设置提示信息显示样式*/ columnSeries.setStyle("labelPosition","outside"); } /**将ColumnSeries添加到ColumnChart的Series集合中去*/ colChart.series=arrcSeries; /** * 渲染加载ColumnChart * 固定格式的xml格式 **/ colChart.dataProvider=xmlData.children(); } /** * 2010年6月17日13:37 * ColumnChart提示信息 * @param hitdata 存放鼠标笔触点显示数据 HitData * */ public function fxColumnChartShowDataTip(hitdata:HitData):String{ var show:String=new String(""); /**获取提示光点的所有信息*/ var curObj:Object=hitdata.item; /**将获取的数据转换成xml*/ var xml:XML=new XML(curObj); /**获取提示列的对象*/ var curSeries:ColumnSeries = ColumnSeries(hitdata.chartItem.element); // 获得当前的ColumnSeries /**用户自定义格式的提示信息*/ var arrs:Array=(columnChartTip.split(";")); for(var a:int=0;a<arrs.length;a++){ var arr1:Array=arrs[a].toString().split("="); if(a==0) { /**show存放用户自定义格式的提示信息的最终数据*/ show=show+arr1[1]+":"+xml.attribute(arr1[0])+"\n"; }else if(a!=arrs.length-1){ if(arr1[0]==curSeries.displayName.toString()) { show=show+arr1[1]+":"+arr1[0]+"\n"; } }else{ show=show+arr1[1]+":"+xml.attribute(curSeries.displayName).toString(); } } return show; } /** * 初始化数据报表 * */ public function createAdvancedDataGrid(app:dynamicStackedChart,headerText:String):void{ var advgrid:AdvancedDataGrid=new AdvancedDataGrid(); advgrid.id=id; advgrid.designViewDataType="flat"; advgrid.setStyle("textAlign","center"); advgrid.percentWidth=100; advgrid.height=250; advgrid.addEventListener(AdvancedDataGridEvent.HEADER_RELEASE,advancedDataGridSort); advgrid.addEventListener(MouseEvent.CLICK,function clickadvgrideClick():void{advgrideItemClick(advgrid,app);}); /** * 加载数据 * */ fxAdvancedDataGridLoader(advgrid,headerText); app.myBox.addChild(advgrid); } /** * ================================AdvancedDataGrid======================================== * 2010年6月17日13:37 * 页面加载AdvancedDataGrid数据 * @param app 主程序入口类型stackedChart * @param xml 存放数据源 String * @param headerText AdvancedDataGrid标题 String * */ public function fxAdvancedDataGridLoader(advgrid:AdvancedDataGrid,headerText:String):void{ var xmld:XML=new XML(xml); var xmlName:XMLList=xmld.children() as XMLList; // 获取XML中元素名称 var arr:Array=new Array(); for(var a:int=0;a<xmlName[0].attributes().length();a++) { arr.push(xmlName.attributes()[a].name().toString().replace(/^\s*|\s*$/g,"").split(" ").join("")); } advgrid.dataProvider=xmld.children(); var adcHeaderText:AdvancedDataGridColumnGroup=new AdvancedDataGridColumnGroup(); adcHeaderText.headerText=headerText; var arrs:Array=new Array(); for(var i:int=0;i<arr.length;i++) { var adc:AdvancedDataGridColumn=new AdvancedDataGridColumn(); adc.dataField="@"+arr[i]; adc.headerText=arr[i]; arrs.push(adc); } adcHeaderText.children=arrs; var arrHeader:Array=new Array(); arrHeader.push(adcHeaderText); advgrid.groupedColumns=arrHeader; } /** * 点击AdvancedDataGrid列头上的排序按钮 */ public function advancedDataGridSort(evt:AdvancedDataGridEvent):void { var column:AdvancedDataGridColumn = AdvancedDataGridColumn(evt.currentTarget.columns[evt.columnIndex]); var columnName:String=column.dataField; column.sortCompareFunction=function(obj1:Object,obj2:Object):int{ return superSort(obj1,obj2,columnName); }; } /** * 根据不同的数据类型选择不同的排序方式 优先级是数字、日期、字符串 */ private function superSort(obj1:Object,obj2:Object,columnName:String):int{ //验证数据类型 Numbe Date String if(!isNaN(obj1[columnName])){ return number_sortCompareFunc(obj1,columnName); } if(strIsDate(obj1[columnName])){ var inputFormat:String=getInputFormat(obj1[columnName]); return date_sortCompareFunc(obj1,columnName,inputFormat); } return string_sortCompareFunc(obj1,columnName); } /** * 日期的排序 */ private function date_sortCompareFunc(obj1:Object,columnName:String,inputFormat:String):int { var date1:Date =DateField.stringToDate(obj1[columnName],inputFormat); var date2:Date =DateField.stringToDate(obj2[columnName],inputFormat); return ObjectUtil.dateCompare(date1,date2); } /** * 字符串的排序 */ private function string_sortCompareFunc(obj1:Object,columnName:String):int{ var str1:String=obj1[columnName]; var str2:String=obj2[columnName]; return ObjectUtil.stringCompare(str1,str2,false); } /** * 数字的排序 */ private function number_sortCompareFunc(obj1:Object,columnName:String):int{ var num1:Number=Number(obj1[columnName]); var num2:Number=Number(obj2[columnName]); return ObjectUtil.numericCompare(num1,num2); } /** * 验证一个字符串是否是日期格式 */ private function strIsDate(str:String):Boolean{ var inputFormat:String=getInputFormat(str); //如果找不到日期表示符号则直接返回false if(inputFormat==null){ return false; } var date:Date=DateField.stringToDate(str,inputFormat); //如果是日期date不为null if(date!=null){ return true; }else{ return false; } } /** * 得到日期的格式 * 判断的顺序为 2009-11-12 2009/11/12 2009.11.12 */ private function getInputFormat(str:String):String{ if(str.indexOf("-")!=-1){ return "YYYY-MM-DD"; } if(str.indexOf("/")!=-1){ return "YYYY/MM/DD"; } if(str.indexOf(".")!=-1){ return "YYYY.MM.DD"; } return null; } /** * 随机产生指定数量颜色的方法 * 产生一个集合每个颜色不相同 * @param num 指定产生多少个颜色Number * @return 指定数量的颜色集合Array(uint) * */ private function getRandomColor(num:Number):Array{ var arrColor:Array=new Array(); arrColor.push(uint(Math.random()*0xffffff)); for(var i:Number=0;i<10000;i++){ /**标记是否产生元素与arrColor中元素系统,达到每次产生不同的元素*/ var sign:Boolean=false; var q:uint=uint(Math.random()*0xffffff); for(var j:Number=0;j<arrColor.length;j++){ if(arrColor[j]==q) { sign=true; } } if(sign==false) { arrColor.push(q+10); } if(arrColor.length==num) { break; } } return arrColor; } /** * LineChart点击事件 * */ public function lineChartItemClick(evt:ChartItemEvent,app:dynamicStackedChart,lineChart:LineChart):void{ var psi:LineSeriesItem= evt.hitData.chartItem as LineSeriesItem; var tipArr:Array=tipStr.split(";"); var nameArr:Array=new Array(); for(var a:int=0;a<tipArr.length;a++){ nameArr[a]=((tipArr[a]).split("="))[0]; } var xmlObj:XML=new XML(psi.item); var str:String=new String(""); for(var b:int=0;b<nameArr.length;b++){ if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; } } app.jsItemClick("id="+lineChart.id+";"+str); //Alert.show(str,"点击LineChart的Item"); } /** * PieChart点击事件 * */ public function pieChartItemClick(evt:ChartItemEvent,pieChart:PieChart):void{ var psi:PieSeriesItem= evt.hitData.chartItem as PieSeriesItem; var tipArr:Array=tipStr.split(";"); var nameArr:Array=new Array(); for(var a:int=0;a<tipArr.length;a++){ nameArr[a]=((tipArr[a]).split("="))[0]; } var xmlObj:XML=new XML(psi.item); var str:String=new String(""); for(var b:int=0;b<nameArr.length;b++){ if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; } } app.jsItemClick("id="+pieChart.id+";"+str); // Alert.show(str,"点击LineChart的Item"); } /** * AreaChart点击事件 * */ public function areaChartItemClick(evt:ChartItemEvent,areaChart:AreaChart):void{ var psi:AreaSeriesItem= evt.hitData.chartItem as AreaSeriesItem; var tipArr:Array=tipStr.split(";"); var nameArr:Array=new Array(); for(var a:int=0;a<tipArr.length;a++){ nameArr[a]=((tipArr[a]).split("="))[0]; } var xmlObj:XML=new XML(psi.item); var str:String=new String(""); for(var b:int=0;b<nameArr.length;b++){ if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; } } app.jsItemClick("id="+areaChart.id+";"+str); // Alert.show(str,"点击LineChart的Item"); } /** * ColumnChart点击事件 * */ public function columnChartItemClick(evt:ChartItemEvent,colChart:ColumnChart):void{ var psi:ColumnSeriesItem= evt.hitData.chartItem as ColumnSeriesItem; var tipArr:Array=tipStr.split(";"); var nameArr:Array=new Array(); for(var a:int=0;a<tipArr.length;a++){ nameArr[a]=((tipArr[a]).split("="))[0]; } var xmlObj:XML=new XML(psi.item); var str:String=new String(""); for(var b:int=0;b<nameArr.length;b++){ if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; } } app.jsItemClick("id="+colChart.id+";"+str); // Alert.show(str,"点击LineChart的Item"); } /** * AdvancedDataGrid点击事件 * */ public function advgrideItemClick(advgride:AdvancedDataGrid,app:dynamicStackedChart):void{ var xmls:XML=advgride.selectedItem as XML; var dataStr:String=new String(""); for(var a:int=0;a<xmls.attributes().length();a++) { dataStr+=xmls.attributes()[a].name()+"="+xmls.attribute(xmls.attributes()[a].name())+";"; } app.jsItemClick("id="+advgride.id+";"+dataStr); // Alert.show(dataStr,"advgrid"); } } }