在flex3里面,更改DataGrid的GridItemEditor非常方便,只需要设置itemEditor属性就可以了
比如要使用NumericStepper作为itemEditord
<mx:DataGridColumn headerText="Quantity" dataField="quantity" itemEditor="mx.controls.NumericStepper" editorDataField="value">
在用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>