You are correct. By default the dataField on DataGridColumn only goes
to the root level of the structure you are passing.

If you are feeling a little ambitious, you can subclass dataGridColumn
and do something like this:

protected function deriveComplexColumn( data:Object,
complexFieldName:String ):Object
{
        var dataPtr:Object;
        
        dataPtr = data;
        
        var complexName:Array;
        complexName = complexFieldName.split( '.', 10 );

        for each ( var key:String in complexName )
        {
                dataPtr = dataPtr[ key ];                               
        }
        
        return dataPtr;
}

Then in your itemToLabel method, you can replace this:

>             try
>             {
>                 data = data[dataField];
>             }

with this:
try
{
                data = deriveComplexColumn( data, dataField );
}

...If you don't want to make your own subclass of dataField, then you
could do the same thing with an itemRenderer or a labelFunction.

So: 

public function myLabelFunc( row:Object, column:DataGridColumn ):String {
  return deriveComplexColumn( row, column.dataField ) as String;
}

Have fun,
Mike


--- In [email protected], Luis Eduardo <[EMAIL PROTECTED]> wrote:
>
> 
>   yeah...  i guess too that if the xml had another format it should
work...
>   but it can't have another format...  :(.
>   the servlets are coded already and they return a xml that have the 
> format i presented on this sample.
>   not the same data, but this is the format.
> 
>   i search inside the DataGridColumn.as code and find a function named 
> "itemToLabel" that have this portion of code:
> 
> if (typeof(data) == "object" || typeof(data) == "xml")
>         {
>             try
>             {
>                 data = data[dataField];
>             }
>             catch(e:Error)
>             {
>                 data = null;
>             }
>         }
> 
> so, i guess that this way of getting data from a XML (using brackets) 
> only can fetch one level of info on the xml format. Not inside his 
> childrens.
> in the end, this line of code will probably be evaluated to this:  
data 
> = [EMAIL PROTECTED]
> To me, this is a bug.... or, being optmistic, a limitation.
> 
> can someone confirm that?        Tracy? Gordon? anyone?
> 
> 
> 
> 
> thunderstumpgesatwork escreveu:
> 
> > Hi,
> >
> > my guess is that your "dataField" cannot support the complex
> > "[EMAIL PROTECTED]"... it should be just a single field name.
> >
> > To me the XML makes more sense (and is simpler) like this:
> >
> > > <mx:XMLList id="employees">
> > > <employee Id="1" gender="female">
> > > <name>Christina Coenraets</name>
> > > </employee>
> > > <employee Id="2" gender="male">
> > > <name>Maurice Smith</name>
> > > </employee>
> > > </mx:XMLList>
> >
> > this makes your dataField just "@gender" which I think should work.
> >
> > good luck.
> >
> > --- In [email protected] 
> > <mailto:flexcoders%40yahoogroups.com>, Luis Eduardo <illogic_code@> 
> > wrote:
> > >
> > >
> > >
> > > i could solve part of my problem with a workaround, but not all is
> > > working ok. (i could display the data but the sorting capability is
> > gone).
> > > someone have an ideia of how to make this on the rigth path?
> > > i am using the "labelFunction" property of the datagrid like this:
> > >
> > > <?xml version="1.0"?>
> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml 
> > <http://www.adobe.com/2006/mxml>">
> > > <mx:Script>
> > > <![CDATA[
> > > public function getRowLabel(item:Object,
> > > column:DataGridColumn):String {
> > > return [EMAIL PROTECTED];
> > > }
> > > ]]>
> > > </mx:Script>
> > >
> > > <mx:XMLList id="employees">
> > > <employee Id="1">
> > > <name gender="female">Christina Coenraets</name>
> > > </employee>
> > > <employee Id="2">
> > > <name gender="male">Maurice Smith</name>
> > > </employee>
> > > </mx:XMLList>
> > >
> > > <mx:Panel title="DataGrid Control Example" height="100%"
> > width="100%"
> > > paddingTop="10" paddingLeft="10" paddingRight="10">
> > >
> > > <mx:DataGrid id="dg" width="100%" height="100%" rowCount="5"
> > > dataProvider="{employees}">
> > > <mx:columns>
> > > <mx:DataGridColumn dataField="@Id" headerText="ID"/>
> > > <mx:DataGridColumn dataField="[EMAIL PROTECTED]"
> > > headerText="Gender" labelFunction="getRowLabel"/>
> > > <mx:DataGridColumn dataField="name" headerText="Name"/>
> > > </mx:columns>
> > > </mx:DataGrid>
> > >
> > > <mx:Form width="100%" height="100%">
> > > <mx:FormItem label="Id">
> > > <mx:Label text="[EMAIL PROTECTED]"/>
> > > </mx:FormItem>
> > > <mx:FormItem label="Name">
> > > <mx:Label text="{dg.selectedItem.name}"/>
> > > </mx:FormItem>
> > > <mx:FormItem label="Gender">
> > > <mx:Label text="[EMAIL PROTECTED]"/>
> > > </mx:FormItem>
> > > </mx:Form>
> > >
> > > </mx:Panel>
> > > </mx:Application>
> > >
> > >
> > >
> > >
> > ----------------------------------------------------------
> > >
> > >
> > >
> > >
> > > Luis Eduardo escreveu:
> > >
> > > >
> > > > hi,
> > > >
> > > > i dont know why but my datagrid cant bind well when the format
of one
> > > > XML have childrens.
> > > > i borrow the example on the documentation and make a test to
you guys
> > > > see what i am talking about.
> > > > to see the issue, just select one row and watch the Labels get the
> > > > "gender" property on the right way but, using the same
notation, the
> > > > grid can't show the values.
> > > >
> > > > thx for the help,
> > > >
> > > > Luís Eduardo.
> > > >
> > > > <?xml version="1.0"?>
> > > > <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>>">
> > > > <mx:XMLList id="employees">
> > > > <employee Id="1">
> > > > <name gender="female">Christina Coenraets</name>
> > > > </employee>
> > > > <employee Id="2">
> > > > <name gender="male">Maurice Smith</name>
> > > > </employee>
> > > > </mx:XMLList>
> > > >
> > > > <mx:Panel title="DataGrid Control Example" height="100%"
width="100%"
> > > > paddingTop="10" paddingLeft="10" paddingRight="10">
> > > >
> > > > <mx:DataGrid id="dg" width="100%" height="100%" rowCount="5"
> > > > dataProvider="{employees}">
> > > > <mx:columns>
> > > > <mx:DataGridColumn dataField="@Id" headerText="ID"/>
> > > > <mx:DataGridColumn dataField="[EMAIL PROTECTED]"
> > > > headerText="Gender"/>
> > > > <mx:DataGridColumn dataField="name" headerText="Name"/>
> > > > </mx:columns>
> > > > </mx:DataGrid>
> > > >
> > > > <mx:Form width="100%" height="100%">
> > > > <mx:FormItem label="Id">
> > > > <mx:Label text="[EMAIL PROTECTED]"/>
> > > > </mx:FormItem>
> > > > <mx:FormItem label="Name">
> > > > <mx:Label text="{dg.selectedItem.name}"/>
> > > > </mx:FormItem>
> > > > <mx:FormItem label="Gender">
> > > > <mx:Label text="[EMAIL PROTECTED]"/>
> > > > </mx:FormItem>
> > > > </mx:Form>
> > > >
> > > > </mx:Panel>
> > > > </mx:Application>
> > > >
> > > >
> > > > _______________________________________________________
> > > > O Yahoo! está de cara nova. Venha conferir!
> > > > http://br.yahoo.com <http://br.yahoo.com> <http://br.yahoo.com 
> > <http://br.yahoo.com>>
> > > >
> > > >
> > >
> > >
> > >
> > >
> > > _______________________________________________________
> > > Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu
> > celular. Registre seu aparelho agora!
> > > http://br.mobile.yahoo.com/mailalertas/ 
> > <http://br.mobile.yahoo.com/mailalertas/>
> > >
> >
> >  
> 
> 
> 
>               
> _______________________________________________________ 
> Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu
celular. Registre seu aparelho agora! 
> http://br.mobile.yahoo.com/mailalertas/
>





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/flexcoders/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to