第一次上传文档时进度条能正常显示百分比变化,当我清空DataGrid关联的ArrayCollection后再次选择需要上传的文件时,进度条显示为100%(显示100%的条目和历史最大上传文件个数相同,超过的部分仍然能够正常显示为0%)。
我的想法是手动的去重置ProgressBar的进度值:
首先是获取DataGrid内嵌的ProgressBar对象。由于ProgressBar是内嵌在DataGrid中,无法通过直接调用id来访问ProgressBar对象,这里就需要在外层定义一个变量去引用它。这里我定义了一个PhotoProgressBar的数组来引用他们。利用ProgressBar的creationComplete()事件将进度条加入外围的进度条数组。
public var PhotoProgressBar:Array = [];
<s:DataGrid x="1" y="26" width="432" height="159" id="dataGrid" requestedRowCount="4">
<s:columns>
<s:ArrayList>
<s:GridColumn width="150" headerText="文件名" dataField="name"></s:GridColumn>
<s:GridColumn headerText="大小(字节)" dataField="size" width="80"></s:GridColumn>
<s:GridColumn headerText="上传状态" width="200">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<fx:Script>
<![CDATA[
private function setParentValue():void{
outerDocument.PhotoProgressBar.push(pbphoto);
}
]]>
</fx:Script>
<s:HGroup fontSize="10" fontWeight="normal">
<mx:ProgressBar id="pbphoto" verticalCenter="true" width="100%" paddingLeft="5" paddingRight="5"
maximum="100" minimum="0" labelPlacement="center"
label="%3%%" textAlign="left"
source="{data.fileRefrence}" creationComplete="setParentValue();" />
</s:HGroup>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
然后是清空ArrayCollection的同时,设置ProgressBar的进度值。这里使用ProgressBar的setProgress方法有个问题就是当ProgressBar的Mode为event(自动)的时候,ProgressBar对象是不接受手动修改它的进度值得,所以这里必须先把Mode改为manual(手动),然后调用setProgress(0,100),最后再把Mode改回event就ok了。
for(var i:int = 0;i < PhotoProgressBar.length;i++)
{
this.PhotoProgressBar[i].mode = "manual";
this.PhotoProgressBar[i].setProgress(0,100);
this.PhotoProgressBar[i].mode = "event";
}
这里还有另一种处理方案:http://www.myexception.cn/flex/1244114.html