http://stackoverflow.com/questions/1408729/flex-datagrid-with-combobox-itemrenderer
<?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataChange="setSelected()" change="onSelectionChange(event)" focusEnabled="true"> <mx:Script> <![CDATA[ import mx.events.DataGridEvent; import mx.events.ListEvent; import mx.controls.dataGridClasses.DataGridListData; private var _ownerData:Object; private var _lookupField:String = "value"; // When using this component as an itemEditor rather than an itemRenderer // then set ' editorDataField="selectedItemKey"' on the column to // ensure that changes to the ComboBox are propogated. [Bindable] public var selectedItemKey:Object; public function set lookupField (value:String) : void { if(value) { _lookupField = value; setSelected(); } } override public function set data (value:Object) : void { if(value) { _ownerData = value; setSelected(); } } override public function get data() : Object { return _ownerData; } private function setSelected() : void { if (dataProvider && _ownerData) { var col:DataGridListData = DataGridListData(listData); for each (var dp:Object in dataProvider) { if (dp[_lookupField] == _ownerData[col.dataField]) { selectedItem = dp; selectedItemKey = _ownerData[col.dataField]; return; } } } selectedItem = null; } private function onSelectionChange (e:ListEvent) : void { if (selectedItem && _ownerData) { var col:DataGridListData = DataGridListData(listData); _ownerData[col.dataField] = selectedItem[_lookupField]; selectedItemKey = selectedItem[_lookupField]; } } ]]> </mx:Script> </mx:ComboBox> //usage: <mx:DataGridColumn headerText="Child" dataField="PersonID" editable="false" textAlign="center"> <mx:itemRenderer> <mx:Component> <fx:GridComboBox dataProvider="{parentDocument.childrenData}" labelField="Name" lookupField="PersonID" change="dispatchEvent(new mx.events.DataGridEvent(mx.events.DataGridEvent.ITEM_FOCUS_OUT, true, true))"/> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> <mx:DataGridColumn labelFunction="lookupChildName" headerText="Child" dataField="PersonID" editable="true" editorDataField="selectedItemKey"> <mx:itemEditor> <mx:Component> <fx:GridComboBox dataProvider="{parentDocument.childrenData}" labelField="Name" lookupField="PersonID" change="dispatchEvent(new mx.events.DataGridEvent(mx.events.DataGridEvent.ITEM_FOCUS_OUT, true, true))"/> </mx:Component> </mx:itemEditor> </mx:DataGridColumn>