Hahahahaha!
Now that that's out my system, yes, I tend to have similar experiences with you in this group. I think there's just a HUGE number of people here who are novices and don't know very much about Flex that ask questions, and very few "experts" that can answer 90% or more of people's questions. There's a lot of "good noise", if that makes any sense. So whenever someone finally posts a response (whether it's the OP or someone else), the floodgates open; people think there may be a genuine issue here. Of course, there are lots of problems that people are having, but so many problems are the same and can be solved by doing a simple search for the solution. Meh. Oh, and I would still consider myself a novice. If I were to solve your problems, A) Would it solve your problem if the event fired on a Click event? Probably not the best way to solve it... looks like a good temporary patch to me. From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of carl_steinhilber Sent: Wednesday, January 09, 2008 1:25 PM To: flexcoders@yahoogroups.com Subject: [flexcoders] Where are the propellerheads? (was:Custom Currency itemRenderer) Really? Nobody has any input? I'm really at a loss of what to think about posting in this group. The people and information here are a wonderful resource, but I've posted 5 or 6 questions here and every single one of them initially received no replies. They didn't get any feedback at all until I responded to my own post once or twice asking again for help. Soooo... am I to assume I'm asking questions that are too advanced for anybody to answer? Not advanced enough for anybody to bother? Questions that have been asked enumerable times by other users and I just missed the previous answers? Or am I truly the first person to ever experience the issues I post about? Maybe I'm being too wordy and people get overwhelmed? Or am I not being wordy enough and people don't understand the problem(s)? I try to write very succinctly, and include source code when I can (typically reduced to exactly the components I'm having trouble with so we're not dealing with an entire app). I try to write subject lines that would be meaningful, rather than just a generic "Help!". I feel like I'm doing everything I can so anyone who wants to help won't waste their time dealing with either a lack of information or superfluous flack. I try to wait a fair amount of time so folks on digests, et al, have had a chance to view my posts. I try to thank anyone who does take the time to respond, even if the response doesn't directly solve the issue. I try to reply to other people's posts that involve aspects I have some experience with. I try to be a good group citizen. But still no one responds. I'd love to know what I'm doing wrong. --- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> , "carl_steinhilber" <[EMAIL PROTECTED]> wrote: > > Hello, > > I'm trying to build a itemRenderer for a currency field in a DataGrid > in Flex 2. Feels like I'm --><-- this close, but I've been fighting > with the other 2% for the last several days and I'm not getting anywhere. > > Below is a sample app that I'm trying to use the itemRenderer in... > simply supplies the DataGrid with a dataProvider based on an Bindable > XML doc/model (that will eventually be loaded in from an external > file). The "cost" field utilizes the currency editor (also below), and > rendererIsEditor is set to true so it's always visible. > > The two problems I'm having are: > 1. the app's itemEditEnd event doesn't seem to be firing as expected. > If I'm editing the cost field, I have to click *twice* (or more) on > fields other than the cost field for the event to actually fire. I > expect the event to fire as soon as I click elsewhere in the app. > > 2. once the itemEditEnd event *does* fire for the cost field, it > doesn't seem to indicate that the bound data is getting updated. Edit > the cost, and get the itemEditEnd event to fire (by clicking twice > outside of the field) and the trace in the app's textarea reports that > the cost is it's original value rather than the value you just entered. > > > Any help would be greatly appreciated! > Thanks in advance, > -Carl > > > // APPLICATION : dgTester.mxml > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > layout="vertical" width="500" creationComplete="initApp()"> > <mx:Script> > <![CDATA[ > import mx.events.DataGridEvent; > import mx.collections.XMLListCollection; > > [Bindable] > public var _xlcData:XMLListCollection; > > private function initApp():void > { > _xlcData = new XMLListCollection(xmlBooks.root.book.copy()); > } > > private function onItemEditEnd(e:DataGridEvent):void > { > taTrace.text=_xlcData.toXMLString(); > > } > > ]]> > </mx:Script> > <mx:XML id="xmlBooks"> > <mx:source> > <root> > <book> > <title>Book 1</title> > <author>A. B.</author> > <cost>25.00</cost> > </book> > <book> > <title>Book 2</title> > <author>C. D.</author> > <cost>125.00</cost> > </book> > </root> > </mx:source> > </mx:XML> > > <mx:DataGrid id="dgridTest" editable="true" dataProvider="{_xlcData}" > width="100%" itemEditEnd="onItemEditEnd(event)"> > <mx:columns> > <mx:DataGridColumn headerText="Title" dataField="title" > editable="true" /> > <mx:DataGridColumn headerText="Author" dataField="author" > editable="true" /> > <mx:DataGridColumn headerText="Cost" dataField="cost" > editable="true" > width="130" editorDataField="currencyString" > itemRenderer="CurrencyEditor" > rendererIsEditor="true" /> > </mx:columns> > </mx:DataGrid> > <mx:TextArea id="taTrace" width="100%" height="100" /> > </mx:Application> > > > > > // CURRENCY ITEMRENDERER : CurrencyEditor.mxml > <?xml version="1.0" encoding="utf-8"?> > <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"> > <mx:Script> > <![CDATA[ > import mx.utils.StringUtil; > import mx.controls.NumericStepper; > import mx.events.NumericStepperEvent; > import flash.events.MouseEvent; > > private var _focusArea:TextInput; > private var _currentStepValue:Number; > > private var _xmlCurrency:XML; > > [Bindable] public var dollar:Number = 0; > [Bindable] public var cent:Number = 0; > > // ** GETTERS and SETTERS > override public function set data(value:Object):void > { > if(value){ > _xmlCurrency = value as XML; > var cvalue:String = String(value["cost"]); > currencyString=cvalue; > } > } > /* > override public function get data():Object > { > // use custom field currencyString() instead of data > } > */ > public function get currencyString():String > { > return dollarText.text+'.'+centText.text; > } > public function set currencyString(value:String):void > { > var > arySplitCurrency:Array=String(mx.utils.StringUtil.trim(value)).split("." ); > > dollar=int(arySplitCurrency[0]); > if (arySplitCurrency.length>1){ > cent = arySplitCurrency[1]; > } else { > cent = 0; > } > } > private function > setStepperValue(event:NumericStepperEvent):void > { > if (!_focusArea)_focusArea=dollarText; > switch(_focusArea){ > case dollarText: > if(NumericStepper(event.target).value < 1) > NumericStepper(event.target).value = 0; > if(NumericStepper(event.target).value > 9999) > NumericStepper(event.target).value = 9999; > dollar = NumericStepper(event.target).value; > break; > case centText: > if(NumericStepper(event.target).value > 99) > NumericStepper(event.target).value = 0; > if(NumericStepper(event.target).value < 0) > NumericStepper(event.target).value = 99; > cent = NumericStepper(event.target).value; > break; > } > _focusArea.setSelection(0, _focusArea.text.length); > > } > private function setTextFocus(event:Event):void > { > _focusArea = event.currentTarget as TextInput; > TextField(event.target).setSelection(0, > _focusArea.text.length); > _currentStepValue = Number(_focusArea.text); > currencyStepper.value = _currentStepValue; > } > private function > setTextFormat(value:Number,theField:TextInput):String > { > if(theField==dollarText && value>0){ > return String(value); > } else { > return (value < 10) ? ("0" + String(value)) : > String(value); > } > } > > ]]> > </mx:Script> > > <!-- numeric stepper with transparent background and background > collored text to effectively "hide" the text box --> > <mx:NumericStepper id="currencyStepper" x="55" y="0" height="100%" > width="70" fontSize="0" > textAlign="right" paddingLeft="80" > focusAlpha="0" borderThickness="0" > borderStyle="none" > maximum="10000" minimum="-1" > change="setStepperValue(event)" > backgroundAlpha="0" > color="{this.getStyle('backgroundColor')}" > click="_focusArea.setFocus();" > focusEnabled="false" /> > > <mx:HBox borderThickness="1" borderStyle="inset" id="currencyBox" > x="0" y="0" horizontalGap="0" verticalAlign="center" > height="100%" horizontalScrollPolicy="off" > verticalScrollPolicy="off" > backgroundAlpha="0"> > > <mx:Label text="$" textAlign="center" width="10" /> > > <mx:TextInput id="dollarText" height="100%" > borderThickness="0" borderStyle="none" backgroundAlpha="0" > textAlign="right" maxChars="4" > text="{setTextFormat(dollar,dollarText)}" > mouseDown="setTextFocus(event)" focusAlpha="0" > editable="false" /> > > <mx:Label text="." textAlign="center" width="10" /> > > <mx:TextInput id="centText" height="100%" borderThickness="0" > borderStyle="none" backgroundAlpha="0" > textAlign="left" maxChars="2" > text="{setTextFormat(cent,centText)}" > mouseDown="setTextFocus(event)" focusAlpha="0" > editable="false" /> > > </mx:HBox> > </mx:Canvas> >