I think he should be fine using the value:Object argument variable, because, being an object, it is passed by reference.
This is working fine in my sample. Tracy ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Darin Kohles Sent: Thursday, November 30, 2006 5:31 PM To: [email protected] Subject: [flexcoders] Re: Can't get value after labelfunction instead of adding the calculation to the value object, which is scoped locally, try adding it to the data object: super.data.net_lbs = total; --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "bsdensmore" <[EMAIL PROTECTED]> wrote: > > yes, they do. > > I'm just doing a very small example to get my head around this. I > actually took the ClassFactory stuff out and went to using the > itemrenderer as is. It works but now I'm running into the issue of my > datagrid losing it's state when you scroll. > > This is what my main Application looks like, > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " > layout="absolute" creationComplete="populate();"> > <mx:Script> > <![CDATA[ > import mx.collections.ArrayCollection; > import mx.utils.*; > import mx.controls.Alert; > > > > [Bindable] public var theData:ArrayCollection; > > > public function populate():void > { > > theData = new ArrayCollection([{Net_Wt:30},{Net_Wt:65}]); > > } > > > public function show():void > { > Alert.show(theData.getItemAt(0).net_lbs); > } > > ]]> > </mx:Script> > > <mx:DataGrid x="85" y="147" id="myDataGrid" dataProvider="{theData}" > editable="true"> > <mx:columns> > <mx:Array> > <mx:DataGridColumn headerText="Net Weight" dataField="Net_Wt" > editable="false"/> > <mx:DataGridColumn headerText="Cases Claimed" dataField="claimed" > editable="true" /> > <mx:DataGridColumn headerText="Net Lbs Claimed" dataField="net_lbs" > editable="false" itemRenderer="calculatedItemRenderer"/> > </mx:Array> > </mx:columns> > </mx:DataGrid> > <mx:Button x="205" y="306" label="Button" id="myBtn" click="show()"/> > > </mx:Application> > > My ItemRenderer looks like: > <?xml version="1.0" encoding="utf-8"?> > <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " width="72" > height="20" horizontalAlign="center"> > <mx:Script> > <![CDATA[ > import mx.controls.listClasses.ListData; > import mx.controls.Alert; > import mx.utils.StringUtil; > import flash.events.Event; > import mx.controls.dataGridClasses.DataGridListData; > > > override public function set data(value:Object):void > { > if (value != null) { > super.data = value; > if (value.claimed != null && > StringUtil.trim(value.claimed) != "") { > var total:Number = value.Net_Wt * value.claimed; > myText.text = total.toString(); > value.net_lbs = total; > } > } > } > > > ]]> > </mx:Script> > > > <mx:Text id="myText" /> > > </mx:HBox> > > > Ben > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Tracy Spratt" <tspratt@> wrote: > > > > First: Does your dataProvider (the item objects specifically) have a > > property for each of the three columns? > > > > Tracy > > > > > > > > ________________________________ > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > > Behalf Of bsdensmore > > Sent: Thursday, November 30, 2006 1:58 PM > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > > Subject: [flexcoders] Re: Can't get value after labelfunction > > > > > > > > I keep going in circles with this. If I don't use the ClassFactory I > > can get the calculations to work but I can't figure out how to send > > the value back to the dataProvider. If I try to use the ClassFactory > > and set my properties through the ClassFactory properties nothing is > > being passed into the itemRenderer. > > > > This is driving me nuts. > > > > My DataGrid has 3 Fields Case_Weight, Cases_Claimed and Net_Lbs. > > Net_Lbs uses the item renderer which is a "Text" Custom Component. > > > > When the dataProvider is populated only Case Weight has a value. The > > other 2 fields are blank. Cases_Claimed is editable and based on what > > is entered in there it multiplies Case_Weight and Cases_Claimed and > > sets Net_Lbs to the total amount. Should I be using something other > > than a "Text" component? > > > > Thanks, > > Ben > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > , "Tracy Spratt" <tspratt@> wrote: > > > > > > An item renderer will certianly work and there are a lot of examples > > > available. The process will be exactly the same as for the checkbox > > > renderer yo have worked with, so it will be much easier this time > > > (assuming you got the checkbox renderer working correctly! If not, I > > > have an example on cflex.net. > > > > > > > > > > > > But actually what I was suggesting was a bit different. I think it was > > > Anatole who mentioned using this technique as well, but what you would > > > do is use the raw result data to build an arrayCollection of new > > custom > > > objects. The custom class would have the caluclated properties built > > in, > > > and you would use this ArrayCollection as the dataProvider. > > > > > > > > > > > > Since clearly your raw dataProvider does not have the calculated > > > property/field in it, you would have to somehow add this property to > > the > > > dataProvider anyway, to be able to set it from your renderer. > > > > > > > > > > > > If you build the custom objects up front, you would not need the > > > renderer, and the class could be optimized to simplify building the > > > structure you are going to send back to the server. > > > > > > > > > > > > This technique leaves labelFunction and even custom renderers > > available > > > to modify the presentation, without mucking with the base data. > > > > > > > > > > > > This may sound inefficient, but I have been doing it on my apps a lot, > > > and have found that for this kind of non-visual stuff, even Flash > > Player > > > 7 was blazingly fast. The improvements in 8, 9 make it even faster. > > > > > > > > > > > > Tracy > > > > > > > > > > > > ________________________________ > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > ] On > > > Behalf Of bsdensmore > > > Sent: Thursday, November 30, 2006 8:32 AM > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > > Subject: [flexcoders] Re: Can't get value after labelfunction > > > > > > > > > > > > Thanks Ben and Tracy, > > > I was thinking that I might need to use an item renderer but was > > > hoping to not have to. I just struggled with using them to implement a > > > checkbox into the DataGrid. I still don't get how to write them > > > effectively. I need to do some more reading to try and get a better > > > grip. > > > > > > What type of component should be used for this? Just a Text or Label? > > > > > > Thanks, > > > Ben > > > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > > , "ben.clinkinbeard" > > > <ben.clinkinbeard@> wrote: > > > > > > > > Tracy is right, you should use an itemRenderer for this. > > > > calculatedValueRenderer should override the data method (like all > > good > > > > little renderers do :)) and in the method retrieve the values to be > > > > calculated as well as updating the calculated value in the > > > > dataProvider. Using the ClassFactory approach that we've discussed, > > > > apossible properties property may look something like this: > > > > > > > > myCalcFactory.properties = {sourceFieldA: "quantity", sourceFieldB: > > > > "price", totalField: "totalItemPrice"}; > > > > > > > > HTH, > > > > Ben > > > > > > > > > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > > <mailto:flexcoders%40yahoogroups.com> , "Tracy Spratt" <tspratt@> > > wrote: > > > > > > > > > > I don't think labelFunction is intended to update the > > dataProvider. > > > I > > > > > don't see how it possibly could, since it can use multiple columns > > > and > > > > > does not even have to have a dataProvider property associated with > > > it. > > > > > > > > > > > > > > > > > > > > If you want this, I heard of a technique that uses a custom item > > > object, > > > > > with calculated properties like that built in, and when result > > data > > > is > > > > > received, one loops over the raw data creating custom objects for > > > each, > > > > > and assigning them to the dataProvider. This also lets you use > > > > > labelFunction to change the way the data is displayed, without > > > messing > > > > > up the underlying data. Currency formatting, for example. > > > > > > > > > > > > > > > > > > > > Just brainstorming. > > > > > > > > > > > > > > > > > > > > Tracy > > > > > > > > > > > > > > > > > > > > ________________________________ > > > > > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > > <mailto:flexcoders%40yahoogroups.com> > > > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > > ] On > > > > > Behalf Of bsdensmore > > > > > Sent: Wednesday, November 29, 2006 5:23 PM > > > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > <mailto:flexcoders%40yahoogroups.com> > > > > > > > > Subject: [flexcoders] Can't get value after labelfunction > > > > > > > > > > > > > > > > > > > > I have 2 DataGridColumns that use a labelfunction to multiply a > > > couple > > > > > of fields and display the value in another column. For some reason > > > > > after the field is updated with the total I can't get at that > > value. > > > > > > > > > > > > > The dataProvider that the DataGrid is bound to is a query result > > > that > > > > > is converted to an ArrayCollection. When the ArrayCollection is > > > > > initially populated this field is blank. So, I'm guessing that > > after > > > > > the labelfunction executes it doesn't update the ArrayCollection > > to > > > > > hold the newly calculated value? > > > > > > > > > > How can I go about updating the ArrayCollection so I can save it > > to > > > a > > > > > database table. I swear I had this working. > > > > > > > > > > Thanks, > > > > > Ben > > > > > > > > > > > > > > >

