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
> > > > >
> > > >
> > >
> >
>

 

Reply via email to