flex datagrid combox

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>

  

你可能感兴趣的:(datagrid)