1.该图表的数据源为ArrayCollection类型的arrayC
2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性名不能重复 3.修改ArrayCollection后,同时修改LineChart的series

实例中,新增,即为新增一个line的数据ArrayCollection,里面对象的结构为 ,时间Date,设备名称(“设备+随机数”),时间的值是1-12小时,设备名称的值是一个随机数
- <span?style="color:#006600;">???????????private??function?createArray():ArrayCollection{??
- ????????????????var?ac:ArrayCollection?=?new?ArrayCollection();??
- ????????????????var?name:String?=?"设备"+?Math.floor(Math.random()*10);??
- ???????????????????
- ????????????????for(var?i:int=0;i12;i++){??
- ????????????????????var?o:Object?=?new?Object();??
- ????????????????????o.Date?=?i+"时";??
- ????????????????????o[name]?=??Math.floor(Math.random()*10);??
- ????????????????????ac.addItem(o);??
- ????????????????}??
- ??????????????????
- ????????????????return?ac;??
- ????????????}???
- </span>??
而后判断,如果是新增line,直接将该ArrayCollection作为lineChart的数据源;否则修改lineChart的数据源,将新增line设备名称属性,作为lineChart的数据源的一个新属性 此时出现的问题是,新增一个line的数据ArrayCollection的对象除了时间Date是固定的,其他属性(设备名称) 其实是动态生成的,也就说,这是个动态对象。要获取动态对象的属性方法如下
>???????????/**?返回对象的某个属性名称??
- ?????????????*?@author?kkkloveyou?2012-10-23??
- ?????????????*?@param?obejct??动态对象??
- ?????????????*?@param?index?要获取第几个对象的属性??
- ?????????????*?@return?name??
- ?????????????*/??
- ????????????public?function?getObjectProperties(obejct:Object,index:int):String{??
- ???????????
- ????????????????var?objInfo:Object?=?ObjectUtil.getClassInfo(obejct);???
- ????
- ????????????????//获取到对象的属性列表??
- ????????????????var?fieldName:Array?=?objInfo["properties"]?as?Array;???
- ???
- ????????????????return?fieldName[index];??
- ????????????}
ObjectUtil 类是一个全静态类,["properties"]可以返回对象属性的数组,只要知道属性在对象中的排位,就可以获得该属性名 ,动态生成数据源如下:
/*判断?数据源是否为空,为空直接放入第一个ArrayCollection对象??,否则?将自己的第二个属性值加入到数据源中*/??
- ????????????????if(arrayC.length>0){??
- ????????????????????var?newAc:ArrayCollection?=?createArray();??
- ????????????????????for(var?a:String?in?arrayC){??
- ????????????????????????for(var?b:String?in?newAc){??
- ????????????????????????????if(arrayC[a].Date?==????newAc[b].Date){??
- ????????????????????????????????var?name?:String?=?getObjectProperties(newAc[b]?,1);??
- ????????????????????????????????arrayC[a][name]?=?newAc[b][name];??
- ????????????????????????????????trace("增加属性:"+newAc[b][name]);??
- ????????????????????????????????break;??
- ????????????????????????????}??
- ????????????????????????}?????????
- ????????????????????}??
- ????????????????}else{??
- ????????????????????arrayC?=?createArray();???
- ????????????????/*根据数据源动态生成线*/??
- ????????????????/*1.取出每个要增加对象的属性?name???*/??
- ????????????????/*?拿到ArrayCollection的第一个对象,就可以拿到他的所有属性名*/??
- ????????????????var?obejct:Object?=?arrayC.getItemAt(0);??
- ????????????????var?objInfo:Object?=?ObjectUtil.getClassInfo(obejct);???
- ????????????????var?fieldNames:Array?=?objInfo["properties"]?as?Array;???
- ????????????????var?newFileNames:Array?=?[];??
- ????????????????for?each(var?q:String?in?fieldNames){???
- ????????????????????if(q!="Date"){??
- ????????????????????????newFileNames.push(q);??
- ????????????????????}??
- ??
- ??
- ????????????????}????
数据源更新了以后,只需要按照数据源arrayC中对象属性名,生成相应的LineSeries,并将LineSeries ?添加到LineChart的series即刻
>???????????????/*2.根据name??取出相应??对象值*/??
- ??????????????????
- ????????????????array?=?[];??
- ????????????????for(var?b:String?in?newFileNames){??
- ????????????????????var?lineSeries:LineSeries=new?LineSeries();??//设置图表的系列??
- ????????????????????lineSeries.xField="Date"??
- ????????????????????lineSeries.yField?=?newFileNames[b];??
- ????????????????????lineSeries.displayName?=?newFileNames[b];??
- ????????????????????lineSeries.setStyle("form",?"curve");????
- ????????????????????//lineSeries.setStyle("lineStroke",s1);??
- ????????????????????//替换或者新增??
- ????????????????????array.push(?lineSeries?);??
- ????????????????}??
- ???????????????
- ????????????????myChart.series?=?array;//给图表系列赋值
移除一条line的过程是相反的,也是类似,首先修改数据源的arrayC,将要移除的属性删除,而后相应的修改myChart.series
/**?移除数据??
- ?????????????*?@return?name?要删除的属性名??
- ????????????private?function?removeFromArray(name:String):void{??
- ????????????????for(var?a:String?in?arrayC){??
- ????????????????????trace("删除属性:"+arrayC[a][name]);??
- ????????????????????delete?arrayC[a][name];??
- ????????????????array?=?[];??
- ????????????????for(var?b:String?in?myChart.series){??
- ????????????????????if(myChart.series[b].yField?!=name){??
- ????????????????????????array.push(myChart.series[b]);??
- ???????????????????????????
- ????????????????myChart.series?=?array?;??
- ??????
- ????????????????legend_id.dataProvider?=?myChart;??
- ????????????} ?
- 完整实例 下载 地址:http://download.csdn.net/detail/kkkloveyou/4705198
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|