Hi

I am trying to create editable datagrid. I have also implemented itemEditEnd 
event because i have nested datafield. I have custom itemeditor. In the custom 
itemeditor, i have textInput and button to open the popup. I click to open open 
pop up.I write some text in the pop up but that that text does not appear in 
itemeditor after close popup.

I have attached sample test code.I have added snippets but if you required i 
can add complete test case.

PopUp
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns="customComponents.popups.*"
                                xmlns:mx="http://www.adobe.com/2006/mxml";
                                xmlns:prgbar="com.vzw.framework.prgbar.*"
                                width="100%"
                                height="100%"
                                verticalScrollPolicy="off"
                                styleName="popupStyle">
        <mx:Script>
                <![CDATA[
                        import mx.managers.PopUpManager;
                        public var opener:Object;
                        public var testTextInputText:String;
                        public function onTextChange(event:Event):void
                        {
                                testTextInputText=(event.currentTarget as 
TextInput).text;
                        }
                        
                        public function onOkClick():void
                        {
                                if(opener) opener.onPopUpClose();
                                PopUpManager.removePopUp(this);
                        }
                ]]>
        </mx:Script>
        <mx:VBox width="100%"
                         height="100%"
                         paddingBottom="0">
                <mx:TextInput text=""
                                          id="testTextInput"
                                          change="onTextChange(event)"/>
                <mx:Button label="ok" click="onOkClick()"/>                     
  
        </mx:VBox>
</mx:TitleWindow>


ItemEditor
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml";
                 width="100%"
                 height="200"
                 horizontalAlign="center"
                 implements="customComponents.datagrid.IEditorValue">
        
        <mx:TextInput id="txtInputByUser"/>
        <mx:Image source="assets/images/spyglass.gif"
                          buttonMode="true"
                          click="onUserClick(event)"/>
        <mx:Script>
                <![CDATA[
                        import mx.events.CollectionEvent;
                        import mx.collections.ArrayCollection;
                        import mx.managers.PopUpManager;
                        import customComponents.popups.CustomPopup;
                        import mx.controls.listClasses.BaseListData;

                        // Internal variable for the property value.
                        private var _listData:BaseListData;

                        // Make the listData property bindable.
                        [Bindable("dataChange")]

                        // Define the getter method.
                        public function get listData():BaseListData
                        {
                                return _listData;
                        }

                        // Define the setter method,
                        public function set listData(value:BaseListData):void
                        {
                                _listData=value;
                        }

                        public function get editValue():String
                        {
                                var returnString:String="";
                                returnString=txtInputByUser.text;
                                return returnString;
                        }

                        public var win:CustomPopup;
                        
                        
                        public function onPopUpClose():void
                        {
                                txtInputByUser.text = win.testTextInputText;
                                trace("Input At popup " +  
win.testTextInputText);
                        }
                        
                        protected function onUserClick(evt:Event):void
                        {
                                if(win==null)
                                win=new CustomPopup();
                                win.width=300;
                                win.height=330;
                                var point:Point=new Point(0, 0);
                                point=evt.target.localToGlobal(point);
                                win.y=point.x;
                                win.x=point.y;
                                PopUpManager.addPopUp(win, this, true);
                                PopUpManager.centerPopUp(win);
                        }
                ]]>
        </mx:Script>
</mx:HBox>



Method

private function onitemEditEnd(event:DataGridEvent):void
{
        var datGrid:DataGrid=(event.currentTarget as  DataGrid);
        if (event.reason == DataGridEventReason.CANCELLED)
                return;

        var selectedObject:Object=datGrid.dataProvider[event.rowIndex];
        var field:String=datGrid.columns[event.columnIndex].dataField;
        var array:Array=field.split(".");
        if (array!= null && array.length >= 2)
        {
                event.preventDefault();
                
                var object:Object=selectedObject[array[0]];
                var textEnteredByUser:String;
                if(datGrid.itemEditorInstance is IEditorValue)
                {
                        
textEnteredByUser=IEditorValue(datGrid.itemEditorInstance).editValue;
                        object[array[1]]=textEnteredByUser;
                }
                else
                {
                        textEnteredByUser = 
TextInput(datGrid.itemEditorInstance).text;
                        object[array[1]]= textEnteredByUser;
                }
                        
                //datGrid.destroyItemEditor();
                datGrid.dataProvider.itemUpdated(event.itemRenderer.data);
        }
}


package customComponents.datagrid
{
        import mx.controls.listClasses.IDropInListItemRenderer;
        import mx.controls.listClasses.BaseListData;

        public interface IEditorValue extends IDropInListItemRenderer
        {
                function get editValue():String;        
        }
}

Thanks
ilikeflex


Reply via email to