Note that, if you subclass the DataGrid and add your labelFunctions to
the subclass, then the this pointer during the call is the datagrid and
you can rummage through the column set all you want.

 

Also note that, if you subclass DataGridColumn, as I often did in the
examples on my blog (blogs.adobe.com/aharui), the this pointer is the
column and you can use its owner property to get back out to the
DataGrid and the rest of the columns.

 

I haven't been following the thread too closely, so I may be out of
context.

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Tim Hoff
Sent: Saturday, August 23, 2008 10:22 AM
To: [email protected]
Subject: [flexcoders] Re: DataGridColumn trouble...

 

Sefi,

If you really wanted to try to get at the calculated values in another
column, in the same row, you would have to use an itemRenderer.  Because
an itemRenderer implements IDropInListItemRenderer, it has access to the
listData property.  This property contains the rowIndex and the
columnIndex of the cell that it is rendering.  While it would clearly be
a pain in the ass, you could use the rowIndex property to locate and
reference the other itemRenderer values in the same row, for the columns
that are desired.  My opinion is that for something simple like this, it
would be overkill and probably require more processing overhead for
locating the other itemRenderers.  Instead, this is the solution that I
would use.  Don't bang too hard. :-)

private function calculateStartValue(item:Object):Number 
{
     var startValue:Number = Number(item.start); // complex calcs here
     return startValue;
}

private function startLabelFunction(item:Object,
column:DataGridColumn):Number 
{
     return calculateStartValue(item);
}

private function calculateEndValue(item:Object):Number 
{
    var endValue:Number = Number(item.end); // complex calcs here
    return endValue;
}

private function endLabelFunction(item:Object,
column:DataGridColumn):Number 
{
    return calculateEndValue(item);
}

private function diffLabelFunction(item:Object,
column:DataGridColumn):Number 
{
    return calculateEndValue(item) - calculateStartValue(item);
}

<mx:DataGrid dataProvider="{ myArrayCollection }">
     <mx:columns>
          <mx:DataGridColumn headerText="Start"
labelFunction="startLabelFunction"/>
          <mx:DataGridColumn headerText="End" labelFunction="endLabelF!
unction"/>
          <mx:DataGridColumn headerText="Diff"
labelFunction="diffLabelFunction"/>
     </mx:columns>
</mx:DataGrid>

-TH

--- In [email protected], "Sefi Ninio" <[EMAIL PROTECTED]> wrote:
>
> Exactly what I was thinking...
> 
> So, to make sure I get this straight - There is no way to get to the
other
> DataGridColumns from the DataGridColumn passed to it's labelFunction.
> 
> There is no getting around to making the same calculation for multiple
> column except for keeping an external map (at least the size of the
grid -
> which chould be quite big) for the calculations results. This, of
course, is
> a mess. More so when you need to update the map when the dataProvider
> changes...
> 
> Ugh... Coding in Flex is a real joy, but every now and then I find
myself
> banging my head against the wall...
> 
> Sefi
> 
> On Sat, Aug 23, 2008 at 3:20 AM, mknuttall [EMAIL PROTECTED] wrote:
> 
> > Because then it wouldn't be a VO. :)
> >> >
> > --- In [email protected] <flexcoders%40yahoogroups.com>,
"Tracy
> > Spratt" tspratt@ wrote:
> > >
> > > If you are usign VOs, why not just add properties and have the VO
do the
> > > calculation internally, and forget the labelFunctions entirely?
> > >
> > > Tracy
> > >
> >
> > 
> >
>

 

Reply via email to