First, to make it completely clear, when working with the data, you must
always use the underlying dataProvider and item and never the DataGrid or
cell itself.  This is because itemRenderers are recycled.  You can never do
any row level work in a renderer in creationComplete for the same reason,
but must override the set data() function.  Google this.

 

Also, if I am understanding correctly, there are two other ways to do this.

 

You mentioned labelFunction.  That is one way. A label function has access
to the entire row item, and can use the values of any property/cell for the
display logic.

 

You could also create a value object with a calculated property.

 

Note that if you update the dataProvider programmatically, you should use
the dataProvider collection API in order to ensure the correct events are
dispatched to update the UI.  You can call itemUpdated() if you assign the
value of an item.property directly.

 

Tracy Spratt,

Lariat Services, development services available

  _____  

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On
Behalf Of Craig
Sent: Sunday, July 12, 2009 11:58 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: This is not as easy as it seems ... apparently...

 






--- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com,
"postwick" <p...@...> wrote:

thank you, sir... I appreciate your help, I shall do as you say !!

Craig

>
> That'll update the value of the cell. 
> 
> You can't do what you're trying to do. You can't have a column with a
different dataField per row. The dataField for the column is the same for
every row.
> 
> Is this data coming from a database, through a view? You really should do
this there. You can set up a view column with an if/then that returns the
column's value you want.
> 
> --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com,
"Craig" <craigj@> wrote:
> >
> > now we're getting somewhere! but will this update the value of the col2
or the value of col2 DataField?
> > 
> > I am trying to change the value of col2 DataField to "Profit" not the
value of col2 itself.
> > 
> > Can I use:
> > 
> > dgOrdExt.getChildAt(i)["Profit"].dataField = "Profit"
> > 
> > CS
> > 
> > 
> > 
> > 
> > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "postwick" <paul@> wrote:
> > >
> > > You can't use selectedItem because there is no selectedItem. You
haven't clicked a row. Try looping through the grid.
> > > 
> > > In the end, I really don't understand why you don't do this in the
dataCollection, or even in the source data.
> > > 
> > > for (var i:Number = 0; i < mygrid.numChildren; i++) {
> > > if (mygrid.getChildAt(i)["Kind"] == "LONG") {
> > > mygrid.getChildAt(i)["Profit"] = "Profit";
> > > }
> > > else { mygrid.getChildAt(i)["Profit"] = "ShProfit"; }
> > > 
> > > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "Craig" <craigj@> wrote:
> > > >
> > > > Ok... In the parent component to the datagrid I used an initialize
event:
> > > > 
> > > > public function initDg():void {
> > > > 
> > > >
if(dgOrdExt.selectedItem["Kind"]=="LONG")dgOrdExt.Profit.dataField="Profit";
> > > >
if(dgOrdExt.selectedItem["Kind"]=="SHORT")dgOrdExt.Profit.dataField="ShProfi
t";
> > > > 
> > > > }
> > > > 
> > > > it does not work. but if I replace the code with
dgOrdExt.dataField="Profit"; which just sets the dataField without
referencing the other column the code is all working... 
> > > > 
> > > > I also tried creationcomplete event and that did not work either.
> > > > 
> > > > 
> > > > 
> > > > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "Craig" <craigj@> wrote:
> > > > >
> > > > > cause I was doing it within the custom component (column) itself
for the datagrid, which can not hold an Id value, I can put it in the parent
component however.... i'll give that a whack.
> > > > > 
> > > > > 
> > > > > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "postwick" <paul@> wrote:
> > > > > >
> > > > > > Not sure why you have all the Application.application stuff on
there. Just reference the datagrid by it's id.
> > > > > > 
> > > > > > <mx:DataGrid id="mygrid"....>
> > > > > > 
> > > > > > mygrid.selectedItem["columname"] = "some value"
> > > > > > 
> > > > > > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "Craig" <craigj@> wrote:
> > > > > > >
> > > > > > > From within the custom component DataGrid Column I tried this
code as you suggested at the initialize event but it errors:
> > > > > > > 
> > > > > > >
if(Application.application.CnvPos.dgOrdExt.selectedItem["Kind"]=="LONG")
Profit.dataField="Profit";
> > > > > > > 
> > > > > > > 
> > > > > > > I don't think the selecteditem field is the answer.
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "Craig" <craigj@> wrote:
> > > > > > > >
> > > > > > > > yes the datagrid is bound to an array collection.
> > > > > > > > I don't want to select any item, I want to change the value
of a column's DataField to a one of two values based on the value of another
column's output.
> > > > > > > > 
> > > > > > > > I don't want to have to 'selecteditem' but I can try that
code below are you suggesting that I use it in the labelfunction of the
datagrid column that I am trying to change?
> > > > > > > > 
> > > > > > > > 
> > > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "postwick" <paul@> wrote:
> > > > > > > > >
> > > > > > > > > Is the datagrid bound to a collection? if so, change the
value in the collection.
> > > > > > > > > 
> > > > > > > > > or try...
> > > > > > > > > 
> > > > > > > > > yourDataGrid.selectedItem["dataColumn1"] =
yourDataGrid.selectedItem["dataColumn2"]
> > > > > > > > > 
> > > > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "Craig" <craigj@> wrote:
> > > > > > > > > >
> > > > > > > > > > I am trying to set the value of a column based on the
value of another column. If I use ...selectedItem... it does not work,
unless I am mistaken.
> > > > > > > > > > 
> > > > > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "postwick" <paul@> wrote:
> > > > > > > > > > >
> > > > > > > > > > > You access the value in a column of a datagrid like
this...
> > > > > > > > > > > 
> > > > > > > > > > > yourDataGrid.selectedItem["dataColumnNameOfColumn"]
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "Craig" <craigj@> wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > I GIVE UP!! I have tried everything!!.. I have a
dataGrid that binds to
> > > > > > > > > > > > an ArrayCollection. I need to change the value of
one columen (Profit)
> > > > > > > > > > > > based on the value of another column (Kind) ie.. the
results (either
> > > > > > > > > > > > 'LONG' or SHORT'). Here is where I'm at. I've tried
putting code into
> > > > > > > > > > > > customer DataGridColumns and labelFunctions and
ItemRenderers... but can
> > > > > > > > > > > > not do it. What seem to be working most are events
in the DataGrid
> > > > > > > > > > > > Component, better than others, but comparing values
in a DataGrid is
> > > > > > > > > > > > obviously impossible.
> > > > > > > > > > > > 
> > > > > > > > > > > > Somehow I need the code to access ArrayCollection
getItemat() but I
> > > > > > > > > > > > can't do it!
> > > > > > > > > > > > 
> > > > > > > > > > > > Please help!
> > > > > > > > > > > > 
> > > > > > > > > > > > <mx:DataGrid xmlns:mx="http://www.adobe.
<http://www.adobe.com/2006/mxml> com/2006/mxml"
> > > > > > > > > > > > initialize="initTA()">
> > > > > > > > > > > > 
> > > > > > > > > > > > <positions:KindColumn id="Kind"
> > > > > > > > > > > > headerText="Kind"
> > > > > > > > > > > > dataField="Kind"
> > > > > > > > > > > > itemRenderer="com.steury.baseClasses.CellFieldTrd"/>
> > > > > > > > > > > > <positions:ProfitColumn id="Profit"
> > > > > > > > > > > > headerText="Profit"/>
> > > > > > > > > > > > 
> > > > > > > > > > > > <mx:Script>
> > > > > > > > > > > > <![CDATA[
> > > > > > > > > > > > import mx.collections.ArrayCollection;
> > > > > > > > > > > > import com.steury.baseClasses.*;
> > > > > > > > > > > > import mx.core.Application;
> > > > > > > > > > > > import mx.controls.dataGridClasses.DataGridListData;
> > > > > > > > > > > > import flash.events.Event;
> > > > > > > > > > > > import mx.core.ClassFactory;
> > > > > > > > > > > > import com.steury.controls.positions.*;
> > > > > > > > > > > > import mx.controls.dataGridClasses.DataGridColumn;
> > > > > > > > > > > > import mx.controls.DataGrid;
> > > > > > > > > > > > 
> > > > > > > > > > > > private function initTA():String {
> > > > > > > > > > > > if
(value[Kind.dataField]=="LONG")Profit.dataField="Profit";
> > > > > > > > > > > > if
> > > > > > > > > > > >
(value[Kind.dataField]=="SHORT")Profit.dataField="ShProfit";
> > > > > > > > > > > > Profit.itemRenderer=new
> > > > > > > > > > > > ClassFactory(com.steury.baseClasses.CellFieldInt);
> > > > > > > > > > > > return myDec.format(Profit)+"%";
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > --- In flexcod...@yahoogro
<mailto:flexcoders%40yahoogroups.com> ups.com, "Craig" <craigj@> wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > I am trying to access the value of a
DataGridColumn and change the
> > > > > > > > > > > > > DataField for another column based on this
value...
> > > > > > > > > > > > > Here is my code:
> > > > > > > > > > > > >
> > > > > > > > > > > > > <?xml version="1.0" encoding="utf-8"?>
> > > > > > > > > > > > > <mx:DataGrid xmlns:mx="http://www.adobe.
<http://www.adobe.com/2006/mxml> com/2006/mxml"
> > > > > > > > > > > > > creationComplete="getDp()" >
> > > > > > > > > > > > >
> > > > > > > > > > > > > ... Datagrid>
> > > > > > > > > > > > > <mx:columns>
> > > > > > > > > > > > > <mx:DataGridColumn dataField="Ticker"
> > > > > > > > > > > > > headerText="Ticker"/>
> > > > > > > > > > > > > <mx:DataGridColumn id="Kind"
> > > > > > > > > > > > > dataField="Kind"
> > > > > > > > > > > > > itemRenderer="com.steury.baseClasses.CellFieldTrd"
/>
> > > > > > > > > > > > > <mx:DataGridColumn id="Profit"
> > > > > > > > > > > > > headerText="Profit"/>
> > > > > > > > > > > > >
> > > > > > > > > > > > > ActionScript:
> > > > > > > > > > > > >
> > > > > > > > > > > > > private function getDp():void {
> > > > > > > > > > > > >
> > > > > > > > > > > >
if(Application.application.CnvPos.dgOrdExt.selectedItem.Kind=="LONG")Pro\
> > > > > > > > > > > > \
> > > > > > > > > > > > >
> > > > > > > > > > > >
fit.dataField="Profit";Application.application.CnvPos.dgOrdExt.refresh()\
> > > > > > > > > > > > \
> > > > > > > > > > > > > ;
> > > > > > > > > > > > > }
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > //This code works find if I use
> > > > > > > > > > > > >
> > > > > > > > > > > > >
if(Kind.DataField="Kind")Profit.dataField="Profit";
> > > > > > > > > > > > >
> > > > > > > > > > > > > //above to test the rest of the code.
> > > > > > > > > > > > >
> > > > > > > > > > > > > I can not figure out how to access the value of
the Datagridcolumn. I
> > > > > > > > > > > > > have tied using event listeners, etc.. which did
not work. Please let
> > > > > > > > > > > > > me know if anyone can help this fairly simple
dilemma.
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>



Reply via email to