This is bound to happen since u are adding the listener on the focusOut event of the textInput.Try adding it on focusOut of datagrid or something like that,but surely not inside ur item renderer component.
On Apr 20, 1:52 pm, Siddhubaba <[email protected]> wrote: > Hi, > > I have a complex code for AdvancedDatagrid where I use 7 locked > columns and 4 dynamic item renders, which run through a loop and > multiply. I had the data recycling issue which was fixed by usage of > set data and if else condition maintaining state, but now a different > issue has popped up. > > Now some extra cells are created on the corner of the grid. I cannot > pinpoint the cause of this behaviour, if anyone can suggest me what is > wrong with the code. > > Here is the code for the renderer: > > <?xml version="1.0" encoding="utf-8"?> > <mx:TextInput > click="onClickHandler(event)" > width="50" > height="20" > styleName="sfdcTextInput" > visible="true" > includeInLayout="true" > restrict="0-9" > maxChars="8" > focusOut="NoUserChanged(event)" > focusIn="keepLastValue(event)" > text="{UserCount}" > xmlns:mx="http://www.adobe.com/2006/mxml"> > <mx:Script> > <![CDATA[ > import org.puremvc.as3.patterns.facade.Facade; > import mx.collections.IViewCursor; > import mx.managers.CursorManager; > import mx.formatters.CurrencyFormatter; > import mx.formatters.NumberFormatter; > import com.fujitsu.app.ApplicationFacade; > import > mx.controls.advancedDataGridClasses.AdvancedDataGridListData; > import mx.collections.ArrayCollection; > import mx.core.Application; > import mx.formatters.NumberBaseRoundType; > > private var columnDataField:String = ""; > private var _userCount:String; > > public var m_verticalScrollPos:Number = 0; //Sets the > position before refreshing the datagrid. Used in Validate > click > > private var iOldValue:Number; > private var iNewValue:Number; > > private function keepLastValue(evt:Event):void{ > iOldValue = Number(this.text); > } > > [Bindable] > public function get UserCount():String > { > return _userCount; > } > > public function set UserCount(value:String):void > { > _userCount = value; > } > > public override function set data( value:Object ) : void > { > super.data = value; > getData(value); > } > > private function getData(dataList:Object):void > { > columnDataField = AdvancedDataGridListData > (listData).dataField; > getNoOfUser(); > checkIfLock(); > } > > /*** > * This function will check whether the opportunity is > Lock or not > * **/ > private function checkIfLock():void > { > if(Application.application.m_blOptyLock) > { > this.enabled = false; > } > } > > /*** > * This function is the event handler for the text inputs > change event > * and will compute totals based on the requirement > * **/ > private function NoUserChanged(evt:Event):void > { > if(this.text == "") this.text = "0"; > iNewValue = Number(this.text); > if(iOldValue == iNewValue){ > //this.focusManager.getNextFocusManagerComponent > (); > return; > } > callLater(UpdateAmount); > } > > private function UpdateAmount():void > { > var totalUser:Number = 0; > var totalAmt:Number = 0; > > // Get the assigned Location Information > for each(var item:Object in data.Location) > { > // If dataField == the name of the location > if(columnDataField==item.objName) > { > item.allocUser = (this.text=="")? 0:Number > (this.text); > //var intNoUser:Number = item.allocUser; > if(data.UserBased) > { > item.allocAmt = computeAmt > (data.AllocAmt,data.AllocUser,item.allocUser); > } > UserCount = item.allocUser; > totalUser+=item.allocUser; > //item.allocAmt = int(item.allocAmt*100)/100; > totalAmt+=item.allocAmt; > } > else > { > totalUser+=item.allocUser; > //item.allocAmt = int(item.allocAmt*100)/100; > totalAmt > +=item.allocAmt; > } > } > // Round Off > //totalUser = int(totalUser*100)/100; > //totalAmt = int(totalAmt*100)/100; > totalAmt = Number(Number(totalAmt).toFixed(2)); > data.TotalUser = totalUser; > data.TotalAmt = Math.round(totalAmt); > // Update background ErrorIndicator > var isError:Boolean = false; > if(data.TotalUser != data.AllocUser) > { > isError=true; > Application.application.AddToUserArray > (data.ProductName); > } > else > { > Application.application.RemoveToUserArray > (data.ProductName); > } > > if(data.TotalAmt != data.AllocAmt) > { > isError=true; > Application.application.AddToAmtArray > (data.ProductName); > } > else > { > Application.application.RemoveToAmtArray > (data.ProductName); > } > > // Update background ErrorIndicator > data.isErrorRow = (isError)? true:false; > > m_verticalScrollPos=this.parentApplication.dgAllocation.verticalScrollPosition; > // Refresh Data and Grid UI > > this.parentApplication.dgAllocation.dataProvider.refresh(); > // > this.parentApplication.dgAllocation.dataProvider.refresh(); = > this.parentApplication.dgAllocation.dataProvider; > validateNow(); > > this.parentApplication.dgAllocation.verticalScrollPosition = > m_verticalScrollPos; > } > > /*** > * This function wil compute the Amount when Quote Line is > User-Based > * **/ > private function computeAmt > (intQuoteSalesPrice:Number,intQuoteNoUser:Number, > intLocNoUser:Number):Number > { > var retVal:Number = 0; > if(intQuoteNoUser!=0) > { > var computedAmt:Number = intLocNoUser* > (intQuoteSalesPrice/intQuoteNoUser); > // round to 2 decimal places > //retVal = int(computedAmt*100)/100; > retVal = Number(Number(computedAmt).toFixed(2)); > } > else > { > retVal = 0; > } > return retVal; > } > > /** > * Function to handle click event. If the Textbox is > enabled then it will set focus to this field. > * This is useful to handle focus in and out event. Event > handler added by Siddhesh Kabe > * > * **/ > private function onClickHandler(evt:Event):void{ > if(this.enabled){ > this.focusManager.getFocus().setFocus(); > } > } > > /*** > * This function will retrieve the no of user value from > the Array of > * Location. If not found then make the gray mark visible > * **/ > private function getNoOfUser():Boolean > { > var found:Boolean = false; > > if(data != null && data.Location != null) > { > for each(var item:Object in > AdvancedDataGridListData(listData).item.Location) > { > if(this.columnDataField == item.objName) > { > UserCount = item.allocUser; > found = true; > break; > } > } > } > if(!found) > { > this.visible = false; > this.includeInLayout = false; > this.editable = false; > this.enabled = false; > //validateNow(); > //ApplicationFacade.getInstance > ().m_locationItemRecord.refresh(); > }else{ > /**/this.visible = true; > this.includeInLayout = true; > this.editable = true; > this.enabled = true;/**/ > } > return found; > } > > ]]> > </mx:Script> > </mx:TextInput> > > I am at my nuts end to find the bug, please please help me out here!!!! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/flex_india?hl=en -~----------~----~----~----~------~----~------~--~---

