No, its not that complicated, just a bug in your sample code.  See my
other reply.

Tracy

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of bsdensmore
Sent: Thursday, November 30, 2006 5:12 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Can't get value after labelfunction

 

Thanks Tracy. 

Like I said, it is working now but I'm running into the issue with
scrolling. I thought overriding the data() method was supposed to stop
that from happening. But, maybe because I'm not dispatching an event
from the itemrenderer back to my Application is what's causing that.

Ben

--- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
, "Tracy Spratt" <[EMAIL PROTECTED]> wrote:
>
> Oops, guess I'm not looking close enough, I see the text control.
> Again, I'll post with any success.
> 
> Tracy
> 
> 
> 
> ________________________________
> 
> From: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
[mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
] On
> Behalf Of bsdensmore
> Sent: Thursday, November 30, 2006 4:07 PM
> To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> 
> Subject: [flexcoders] Re: Can't get value after labelfunction
> 
> 
> 
> 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> 
> <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> 
> <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 flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>
<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: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com>
> [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com>
> ] On
> > Behalf Of bsdensmore
> > Sent: Thursday, November 30, 2006 1:58 PM
> > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
<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 flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <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: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > ] On
> > > Behalf Of bsdensmore
> > > Sent: Thursday, November 30, 2006 8:32 AM
> > > To: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>
<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 flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <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 flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <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: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <mailto:flexcoders%40yahoogroups.com> 
> > <mailto:flexcoders%40yahoogroups.com> 
> > > <mailto:flexcoders%40yahoogroups.com> 
> > > [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <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: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> <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