Flex4.5中使用invalidateCell函数更新GridItemRenderer内容的问题

这两天在做关于Flex网站应用的项目,使用的开发环境是flash builer4.5,项目中使用了DataGrid组件,器数据源在外部.as文件中。DataGrid中使用了GridItemRenderer来包含LinkButton和Label,但是在编程中发现DataGrid数据源的修改不能改变与之绑定的LinkButton和Label的相关属性,在网上查了很久也没看到相关问题的解决方案,折腾一天之后,还是在官方帮助文档上找到了解决方法。废话不再多说,下面给出详细情况和解决方案。

<s:DataGrid id="dataGrid1" width="100%" height="60%" dataProvider="{arrColl2}">

上面是我使用的DataGrid的一些属性,其中有这样一列<s:GridColumn headerText="状态" dataField="state"/>,当arrColl2中某一个数据对象(如arrColl2[i])的state改变时,使用dataGrid1.invalidateCell(i,2)可以使得“状态”列的相应单元格内容改变(注:2为“状态”这一列的列号)。我感觉invalidateCell挺好用的,于是在下面这一列的改变中,我也同样使用了类似的方法,结果就出问题了。一开始的代码版本如下:

<s:GridColumn dataField="haveRe" headerText="查看报告摘要">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer clipAndEnableScrolling="true">
<mx:LinkButton label="查看报告" accentColor="#cdddf3" visible="{data.haveRe}">
</mx:LinkButton>
<s:Label id="mylab1" text="{data.haveRe.toString()}"/>

</s:GridItemRenderer>
</fx:Component> 
</s:itemRenderer>
</s:GridColumn>

当我在外部.as文件中修改arrColl2[i].haveRe=true后,使用dataGrid1.invalidateCell(i,3)对“查看报告摘要列”进行更新时,LinkButton的visible依然是false。在查了很久之后才发现,原来GridItemRenderer内容的改变需要重写prepare()方法,在根据官方文档做了相应修改之后,代码如下:

<s:GridColumn dataField="haveRe" headerText="查看报告摘要">
	<s:itemRenderer>
		<fx:Component>
			<s:GridItemRenderer clipAndEnableScrolling="true">
				<fx:Script>
					<![CDATA[  
						import mx.controls.Alert;
																		
						override public function prepare(hasBeenRecycled:Boolean):void
						{
							if(data!=null)
							{
								try{
									if(data.haveRe)
									{
										mylink1.visible=true;
										mylab1.text = "true";
									}
								}
								catch(e:Error)
								{
									Alert.show("出错了……"+e.toString());
								}
							}
						}
					]]>
				</fx:Script>
				<mx:LinkButton id="mylink1" label="查看报告" accentColor="#cdddf3" visible="false">
				</mx:LinkButton>
				<s:Label id="mylab1" text="false"/>
											
			</s:GridItemRenderer>
		</fx:Component> 
	</s:itemRenderer>
</s:GridColumn>	

运行后达到了我想要的效果。

好的,情况讲述就到这里了,重写prepare及invalidateCell的使用请参看官方文档:http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/spark/components/gridClasses/GridItemRenderer.html#propertySummaryhttp://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/spark/components/DataGrid.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值