flex4.5 DataGrid的GridItemEditor属性设置

在flex3里面,更改DataGrid的GridItemEditor非常方便,只需要设置itemEditor属性就可以了

比如要使用NumericStepper作为itemEditord 

<mx:DataGridColumn headerText="Quantity"
	dataField="quantity"
	itemEditor="mx.controls.NumericStepper"
	editorDataField="value">



这样就能正确的显示NumericStepper对应的值,已经更改他的值

在用flex4.5的时候使用itemEditor,差别还是很大的

官方文档中提到

一个"item editor"可以是任何一个实现了 IGridItemEditor 接口的Spark组件, 并且DataGrid每列都可以指定不同的 "item editor" 类

也就是说不能随便指定控件了,必须是一个实现了 IGridItemEditor 接口的Spark组件才可以被用作itemEditor属性。

所有实现IGridItemEditor接口的类应该用 "data"的 setter 中去初始化编辑组件的值默认实现类GridItemEditor 用 data[column.dataField] 设置 value属性. 这样允许子类 通过 覆盖 value setter方法将值赋给更多的编辑控件.


所以如果使用NumericStepper的话就得当成一个GridItemEditor的child

Adobe的官方博客上有解决方案,重载了GridItemEditor的value属性的getter和setter

像这样

<s:GridColumn headerText="数量" dataField="quantity">
	<s:itemEditor>  
		<fx:Component>  
			<s:GridItemEditor >  
				<s:NumericStepper id="quantity"/>  
				<fx:Script>
					<![CDATA[
						override public function get value():Object
						{
							return quantity.value;            
						}
						
						override public function set value(newValue:Object):void
						{
							quantity.value = newValue.toString();
						}                                        
					]]>
				</fx:Script>
			</s:GridItemEditor>  
		</fx:Component>  
	</s:itemEditor>  
</s:GridColumn>



你可能感兴趣的:(flex4.5 DataGrid的GridItemEditor属性设置)