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/