flex的Datagrid的itemRenderer问题:奇葩的现象!

本文探讨了在Flex中使用Datagrid结合自定义itemRenderer实现Combobox时遇到的数据绑定问题。当更改Combobox选项后,选项会自动复位至首个元素,通过调整rendererIsEditor属性并确保数据类型一致性,最终解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个Datagrid里面的一列用itemRenderer做了一个Combobox。代码是前辈的。自己拿过来用。发现只要改其中一列的Combox选项。再去用鼠标点任何一个地方,该Combobox里面的选项就会跳到第一个选项上面去。但是其他页面我用到的地方却不出现这个问题。

百思不得其解!

唯一不同的地方就是数据源。虽然都是ArrayCollection,但是里面装的对象不同。导致datafield的字段不同。但是我也方法里面照着写了的。

部分代码如下:

<mx:DataGrid id="gd_ipaccount" editable="true" dataProvider="{accountips}" x="0" y="32" width="100%" height="100%">
	      <mx:columns>
	        <mx:DataGridColumn editable="true" headerText="信任IP" dataField="trust_ipaddr"/>
	        <mx:DataGridColumn editable="true" headerText="账号" dataField="app_account"/>
	        <mx:DataGridColumn itemRenderer="components.policy.gather.New_nbaauditSelect" rendererIsEditor="true" headerText="审计选项" dataField="viewfield"/>
	      </mx:columns>
	    </mx:DataGrid>

 

components.policy.gather.New_nbaauditSelect部分源代码:

   override public function get data():Object
	        {
	        	if(_data!=null)
	        	{
	        		if(this.selectedItem!=null)
	        		{
	        			if(_data.hasOwnProperty("viewfield"))
	        			{
	        			 _data.viewfield = this.selectedItem.data;	
	        			}
	        			
					   if(_data.hasOwnProperty("audit_type")){
					   	   if(this.selectedItem == auditselect[0])
					   	   {
					   	   	 _data.audit_type = 0;
					   	   }else if(this.selectedItem == auditselect[1]){
					   	   	 _data.audit_type = 1;
					   	   }else if(this.selectedItem == auditselect[2]){
					   	   	 _data.audit_type = 2;
					   	   }
	        			}
	        		}
	        	}
	        	return _data;
	        }


后来发现rendererIsEditor="true"是指渲染来源的。大概的意思是:如果是true,表示渲染来源来源于components.policy.gather.New_nbaauditSelect。效果上显示ComboBox.

如果为false,表示结果来源于Datagrid,效果上就是显示viewfield的值。(注:我之前用的是一个int类型的字段)。我把rendererlsEditor设为false。发现先前int类型的值改变后。combobox的set data() 方法运行成功。我怀疑是我的get data() 方法没有起作用。

抱着试试的态度我吧他改成了String类型。结果就成功了。而且我set data() 方法audit_type字段设置成功。


   override public function get data():Object
	        {
	        	if(_data!=null)
	        	{
	        		if(this.selectedItem!=null)
	        		{
	        			if(_data.hasOwnProperty("viewfield"))
	        			{
	        			 _data.viewfield = this.selectedItem.data;	
	        			}
	        			
					   if(_data.hasOwnProperty("audit_type")){
					   	   if(this.selectedItem == auditselect[0])
					   	   {
					   	   	 _data.audit_type = 0;
					   	   }else if(this.selectedItem == auditselect[1]){
					   	   	 _data.audit_type = 1;
					   	   }else if(this.selectedItem == auditselect[2]){
					   	   	 _data.audit_type = 2;
					   	   }
	        			}
	        		}
	        	}
	        	return _data;
	        }


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值