Sounds like you want a cell renderer for your columns.  For each 
DataGridColumn in your grid, you can add cellRenderer="MyRenderer" 
to tell the grid how to determine what should be displayed.  The 
renderer will be passed the object in the dataprovider for each 
particular row, which you can use to determine what to display for 
the specific row and column.

Here's a nice link to info on cell renderers:

http://www.communitymx.com/content/article.cfm?cid=B4AED

You can write cell renderers in either .as or .mxml; search the 
archives and you'll find plenty of examples.  Here's one I use to 
display formatted sizes of file objects.

import mx.controls.Label;

/*
 * FileSizeCellRenderer is a simple Label-based cell renderer that 
displays
 * its item content as a formatted file size string.
 */

class FileSizeCellRenderer extends Label {
    var listOwner: MovieClip; // The reference we receive to the 
list.
    var getCellIndex: Function; // The function we receive from the 
list.
    var getDataLabel: Function; // The function we receive from the 
list.
        
    function setValue(str:String, obj:Object, state:String) : Void {
        if (obj != undefined) {
            // format the file size value in the cell
            this.text = obj.file.getSizeString();
        }
        else {
            this.text = "";
        }
    }
}


Doug

--- In [email protected], "sshriyan27" <[EMAIL PROTECTED]> 
wrote:
>
> Thanks Doug,
> I was able to print the child object properties using the 
> labelFunction, but the problem is the column is editable, so when 
> ever i click that filed it's changing back to [object.object].
> Do you have any samples using as script printing child object 
> properties in datagrid? 
> BTW i changed logger level="Debug in gateway-config file and it's 
> was printing all the parent child values from Java.
> 
> i appreciate your help.
> 
> --- In [email protected], "douglowder" <douglowder@> 
> wrote:
> >
> > I think that design is fine.  I use a similar approach, except 
> that my
> > POJOs are a combination of entity objects + dataaccess method, 
i.e.
> > each class has a getList() method that returns a list of all 
known
> > instances of that type.  I chose that approach because these were
> > POJOs written explicitly with Flex in mind, since this was a new
> > project with no existing codebase to work from.  It's entirely 
up 
> to
> > you how much separation you want between data access and the 
> objects
> > themselves.
> > 
> > A case where you might be forced to use a facade class is when 
you
> > have a private member that is determined dynamically in code and
> > accessed only through a getter.  In this instance, you could 
write
> > another class that calls the first class's getter and sets a 
public
> > member variable to the results.  This new class would be what 
your
> > RemoteObject calls from Flex.
> > 
> > 
> > Doug
> > 
> > --- In [email protected], "sshriyan27" <sshriyan27@> 
> wrote:
> > >
> > > Thanks Doug,
> > > Now i understand. Let me ask you a question then, my design 
> consists 
> > > of 2 parts, i have entity objects and dataaccess objects, each 
> time 
> > > i do a method call in dataaccess obj and it returns either a 
> > > collection of entity objects or single entity objects to 
client.
> > > 
> > > Is this a right way to do or should i use some facade 
patterns, 
> what 
> > > do you think, since i'm coming struts background it's kind of 
> > > learning curve for me using flex. I'm not using any EJB's for 
> our 
> > > application. It's a simple 3 tier arch.
> > > 
> > > thanks
> > > 
> > > 
> > > 
> > > 
> > > --- In [email protected], "douglowder" <douglowder@> 
> > > wrote:
> > > >
> > > > It isn't a case of need.  One reason you might *want* to 
have 
> > > public
> > > > members in your POJO is for convenience.  Flex will 
> automatically
> > > > handle conversion of Java strings (as well as several other 
> types;
> > > > check the documentation) to actionscript, so if your 
> RemoteObject
> > > > returns a collection of POJOs with public String members you 
> can 
> > > plug
> > > > that list directly into a grid's dataprovider without any 
extra
> > > > actionscript code.  This would correspond to collections of 
> ClassA 
> > > and
> > > > ClassB objects, which map nicely to what dataProviders 
> expect.  You
> > > > cannot, however, pass a list of Class1 POJOs and expect the 
> > > datagrid
> > > > to display Class1.ClassA.A1, Class1.ClassB.B1, etc., without 
> doing
> > > > some extra work on the actionscript side.  See the 
difference?
> > > > 
> > > > Now, this doesn't mean you *have* to do things either one 
way 
> or
> > > > another.  I'm just trying to explain what I personally think 
> is the
> > > > easiest way to get POJO data into a dataGrid in Flex.  If 
this 
> > > still
> > > > isn't clear, let me know and I'll try to provide some 
working 
> code.
> > > > 
> > > > Hope that helps!
> > > > 
> > > > Doug
> > > > 
> > > > --- In [email protected], "sshriyan27" 
<sshriyan27@> 
> > > wrote:
> > > > >
> > > > > Thanks guys for helping me out here, but still i don't 
> > > understand 
> > > > > why should i need to have public members 
firstname,lastname 
> etc 
> > > in 
> > > > > the CloserResultsForm form, isn't it involves redundancy 
and 
> > > hard to 
> > > > > maintain lots of member variables. 
> > > > > 
> > > > > all i want is this,
> > > > > 
> > > > > Class1 instanciate class A, class B, Class A has member 
> > > variables 
> > > > > A1,A2 and Class B has B1,B2 etc,
> > > > > if i want to display A1, B1 values using Class1, 
> > > > > i should be saying classA.A1,classA.A2, ClassB.B1, 
ClassB.B2 
> etc,
> > > > > i don't want to declare A1,A2 in Class1 again in 2 palces.
> > > > > Am i missing something here about my design pattern? May 
be 
> i'm 
> > > > > confused.
> > > > > Pls help me soon.
> > > > > 
> > > > > --- In [email protected], "douglowder" 
> <douglowder@> 
> > > > > wrote:
> > > > > >
> > > > > > You're almost there!  What you want is for 
> CloserDataAccess to 
> > > > > return
> > > > > > a list of objects that contain firstname and lastname 
> > > properties. 
> > > > > > What you have now is a list of objects that contain 
other 
> > > objects 
> > > > > (the
> > > > > > UserProfileForms), which then contain firstname and 
> lastname.
> > > > > > 
> > > > > > If your CloserResultsForm java class had public members 
> > > firstname 
> > > > > and
> > > > > > lastname, initialized by calling the proper getters from
> > > > > > UserProfileForm, your datagrid should work.  This 
wouldn't 
> even
> > > > > > require the separate ActionScript classes for 
> > > CloserResultsForm and
> > > > > > UserProfileForm.
> > > > > > 
> > > > > > 
> > > > > > Doug
> > > > > > 
> > > > > > 
> > > > > > --- In [email protected], "sshriyan27" 
> > > <[EMAIL PROTECTED]> 
> > > > > wrote:
> > > > > > >
> > > > > > > Thanks but still not working i made them private now.
> > > > > > > I'm totally lost with action script and object mapping.
> > > > > > > Do i need to use action script for the value objects i 
> have, 
> > > if 
> > > > > that 
> > > > > > > so is there any easy way to write action scripts same 
as 
> the 
> > > > > java 
> > > > > > > objects. 
> > > > > > > 
> > > > > > > 
> > > > > > > <mx:Application 
> > > xmlns:mx="http://www.macromedia.com/2003/mxml"; 
> > > > > > > initialize="initApp()" xmlns:i2view="view" 
> pageTitle="Test 
> > > > > > > Application">
> > > > > > >           
> > > > > > >  <mx:Script>
> > > > > > >   import src.com.flex.form.*;
> > > > > > >   
> > > > > > >   var users: Array;
> > > > > > >   var upForm: UserProfileForm;
> > > > > > >   var closerResultsForm: CloserResultsForm;
> > > > > > >   var userList: Array;
> > > > > > >   var resultList: Array;
> > > > > > >   
> > > > > > >         function initApp() {
> > > > > > >            ro.getResults(); // returns 
> > > CloserResultsForm as a 
> > > > > > > collection
> > > > > > >              
> > > > > > >   }
> > > > > > > 
> > > > > > >         function getUserList_result(event) {
> > > > > > >             userList=event.result;
> > > > > > >   }
> > > > > > >           
> > > > > > >   function getResultList_result(event) {
> > > > > > >            resultList=event.result;
> > > > > > >              
> > > > > > >         }
> > > > > > >    
> > > > > > > 
> > > > > > > </mx:Script>
> > > > > > >  
> > > > > > >  <mx:RemoteObject id="ro" 
> > > > > > > source="com.chl.dataaccess.CloserDataAccess">
> > > > > > >     <mx:method name="getResults" 
> result="getResultList_result
> > > > > > > (event)"/> 
> > > > > > > </mx:RemoteObject>
> > > > > > >  
> > > > > > > <mx:DataGrid id="dg" dataProvider="{resultList}" 
> > > width="838"  
> > > > > > > editable="true" showHeaders="true">
> > > > > > >             <mx:columns>
> > > > > > >               <mx:Array>  
> > > > > > >                 <mx:DataGridColumn 
> columnName="firstname" 
> > > > > > > headerText="Firstname"/>
> > > > > > >                 <mx:DataGridColumn 
columnName="lastname" 
> > > > > > > headerText="Lastname"/>
> > > > > > >               </mx:Array> 
> > > > > > >       </mx:columns>        
> > > > > > > </mx:DataGrid>
> > > > > > > 
> > > > > > > 
> > > > > > > ** This is the situation i'm in now, we're going to 
> develop 
> > > new 
> > > > > apps 
> > > > > > > using RIA technology, we don't have time to learn 
action 
> > > scripts 
> > > > > or 
> > > > > > > any other vedor specific scripts. so i'm trying to 
> convince 
> > > that 
> > > > > > > flex is the best solution, but it looks like flex dev 
is 
> not 
> > > > > rapid 
> > > > > > > as what i saw from demo, still lots of manual coding 
has 
> to 
> > > be 
> > > > > done. 
> > > > > > > May be i'm not understanding fully about flex.
> > > > > > > 
> > > > > > > So can you guys tell me whether i should use flex or 
> > > coldfushion 
> > > > > or 
> > > > > > > ajax with struts as i did before.
> > > > > > >  
> > > > > > > Thanks
> > > > > > > 
> > > > > > > 
> > > > > > > --- In [email protected], "douglowder" 
> > > > > <[EMAIL PROTECTED]> 
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > Ah, it looks like you have taken both my *and* 
Dave's 
> > > advice, 
> > > > > when 
> > > > > > > you
> > > > > > > > really only needed to do one or the other.  So, if 
you 
> > > don't 
> > > > > have a
> > > > > > > > problem with making your firstname and lastname 
> variables 
> > > > > public in
> > > > > > > > your UserProfileForm POJO (which you might, since it 
> kind 
> > > of 
> > > > > > > defeats
> > > > > > > > the purpose of getters and setters), then just pass 
> your 
> > > > > datagrid a
> > > > > > > > collection of UserProfileForms:
> > > > > > > > 
> > > > > > > >    <mx:DataGrid 
> dataProvider="{myUserProfileFormCollection
> > > }" />
> > > > > > > > 
> > > > > > > > This will display the entire object in the 
datagrid.  
> If 
> > > you 
> > > > > only 
> > > > > > > want
> > > > > > > > to see certain fields, or want to specify a specific 
> > > order, 
> > > > > define
> > > > > > > > columns for the datagrid like so:
> > > > > > > > 
> > > > > > > >    <mx:DataGrid 
> dataProvider="{myUserProfileFormCollection
> > > }">
> > > > > > > >         <mx:columns>
> > > > > > > >             <mx:Array>
> > > > > > > >                 <mx:DataGridColumn 
> columnName="firstname"
> > > > > > > > headerText="First Name"/>
> > > > > > > >                 <mx:DataGridColumn 
> columnName="lastname"
> > > > > > > > headerText="Last Name"/>
> > > > > > > >             </mx:Array>
> > > > > > > >         </mx:columns>
> > > > > > > >    </mx:DataGrid>
> > > > > > > > 
> > > > > > > > If, however, you want to keep the members variables 
of 
> > > your 
> > > > > objects
> > > > > > > > hidden and provide access only through getters and 
> > > setters, 
> > > > > then
> > > > > > > > change the declarations back to private and follow 
> Dave's 
> > > > > advice.
> > > > > > > > 
> > > > > > > > I hope that helps!
> > > > > > > > 
> > > > > > > > Doug
> > > > > > > > 
> > > > > > > > --- In [email protected], "sshriyan27" 
> > > > > <[EMAIL PROTECTED]> 
> > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > Let me send you all my classes, i don't still 
> > > understand! 
> > > > > Thanks 
> > > > > > > for 
> > > > > > > > > your help anyway.
> > > > > > > > >  
> > > > > > > > > public class UserProfileForm {
> > > > > > > > > 
> > > > > > > > >       public String firstname=null;
> > > > > > > > >       public String lastname=null;
> > > > > > > > >        
> > > > > > > > >         public UserProfileForm(){}
> > > > > > > > > 
> > > > > > > > >       public String getFirstname() {
> > > > > > > > >               return firstname;
> > > > > > > > >       }        
> > > > > > > > >       public void setFirstname(String firstname) {
> > > > > > > > >               this.firstname = firstname;
> > > > > > > > >       }
> > > > > > > > >       public String getLastname() {
> > > > > > > > >               return lastname;
> > > > > > > > >       }
> > > > > > > > >       public void setLastname(String lastname) {
> > > > > > > > >               this.lastname = lastname;
> > > > > > > > >       }
> > > > > > > > >        
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > public class CloserResultsForm implements 
> Serializable{
> > > > > > > > >       public UserProfileForm userProfileForm;
> > > > > > > > >       
> > > > > > > > >       public CloserResultsForm(){
> > > > > > > > >         userProfileForm=new UserProfileForm();
> > > > > > > > >       }
> > > > > > > > >       public UserProfileForm getUserProfileForm() {
> > > > > > > > >               return userProfileForm;
> > > > > > > > >       }
> > > > > > > > >       public void setUserProfileForm
> (UserProfileForm 
> > > > > > > > > userProfileForm) {
> > > > > > > > >               this.userProfileForm = 
> userProfileForm;
> > > > > > > > >       }
> > > > > > > > >       
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > ** my dataaccess returns collection of 
> CloserResultsForm 
> > > > > > > > > 
> > > > > > > > > CloserResultsForm.as file
> > > > > > > > > class src.com.flex.form.CloserResultsForm{
> > > > > > > > >       public var userProfileForm : UserProfileForm;
> > > > > > > > >       
> > > > > > > > >       static var registered=Object.registerClass
> > > > > > > > > ("com.chl.form.CloserResultsForm", 
> > > > > > > > > src.com.flex.form.CloserResultsForm);
> > > > > > > > >        
> > > > > > > > >         public function CloserResultsForm(){
> > > > > > > > >                 this.userProfileForm=new 
> UserProfileForm();
> > > > > > > > >         }
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > UserProfileForm.as file
> > > > > > > > > class src.com.flex.form.UserProfileForm{
> > > > > > > > >   public  var firstname:String;
> > > > > > > > >     public  var lastname:String;
> > > > > > > > >       public var _remoteClass;
> > > > > > > > >     static var registered=Object.registerClass
> > > > > > > > > ("com.chl.form.UserProfileForm", 
> > > > > > > src.com.flex.form.UserProfileForm);
> > > > > > > > >        
> > > > > > > > > } 
> > > > > > > > > 
> > > > > > > > > How do i print the firstname and lastname in 
> datagrid, 
> > > am i 
> > > > > > > missing 
> > > > > > > > > something here.
> > > > > > > > > 
> > > > > > > > > --- In [email protected], "Dave Wolf" 
> > > > > <[EMAIL PROTECTED]> 
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Ahh yes, the same J2EE struggles with property 
> > > setting.  
> > > > > As 
> > > > > > > Doug 
> > > > > > > > > says
> > > > > > > > > > you do not want to be calling a million setters 
on 
> a 
> > > > > remote 
> > > > > > > object.
> > > > > > > > > > You are better off refactoring this to either 
> create a 
> > > new 
> > > > > > > Value
> > > > > > > > > > Object, or to treat your existing class itself 
as 
> a 
> > > value 
> > > > > > > object.  
> > > > > > > > > > 
> > > > > > > > > > So rather then getting a remote reference to say 
> > > > > > > UserProfileForm, 
> > > > > > > > > then
> > > > > > > > > > calling a million getters and setters, I would 
> create 
> > > a 
> > > > > POJO 
> > > > > > > which
> > > > > > > > > > returns the UserProfileForm as a return type.  
> Then 
> > > call 
> > > > > all 
> > > > > > > your
> > > > > > > > > > setters locally, and pass it back up to the 
server 
> as 
> > > the 
> > > > > > > > > parameter to
> > > > > > > > > > another POJO method call.
> > > > > > > > > > 
> > > > > > > > > > The second option is to add a new Value Object 
> > > property to 
> > > > > the
> > > > > > > > > > UserProfileForm.  Again create the stub, call 
all 
> the 
> > > > > setters 
> > > > > > > on 
> > > > > > > > > the
> > > > > > > > > > local value object, then call one call on the 
> > > > > UserProfileForm 
> > > > > > > to
> > > > > > > > > > return this coarsly grained Value Object.
> > > > > > > > > > 
> > > > > > > > > > You need to keep network calls in mind in your 
> > > > > architecture.  
> > > > > > > > > There is
> > > > > > > > > > a graveyard filled with failed J2EE projects who 
> > > ignored 
> > > > > the 
> > > > > > > > > network
> > > > > > > > > > and the effects of not architecting around 
> seriously 
> > > > > reducing 
> > > > > > > the
> > > > > > > > > > number and size of remote calls.
> > > > > > > > > > 
> > > > > > > > > > -- 
> > > > > > > > > > Dave Wolf
> > > > > > > > > > Cynergy Systems, Inc.
> > > > > > > > > > Macromedia Flex Alliance Partner
> > > > > > > > > > http://www.cynergysystems.com
> > > > > > > > > > 
> > > > > > > > > > Email:  [EMAIL PROTECTED]
> > > > > > > > > > Office: 866-CYNERGY
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > --- In [email protected], "douglowder" 
> > > > > > > <[EMAIL PROTECTED]> 
> > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > Flex 1.5 does a pretty good job of 
automatically 
> > > > > translating 
> > > > > > > > > Java 
> > > > > > > > > > > types to ActionScript, but only for members 
that 
> are 
> > > > > > > declared 
> > > > > > > > > > > public, not private.  So, if you want to 
> continue 
> > > using 
> > > > > your 
> > > > > > > > > getter 
> > > > > > > > > > > routines for private members in your existing 
> > > classes, 
> > > > > be 
> > > > > > > > > prepared 
> > > > > > > > > > > to make a lot of calls to your remote object.  
> You 
> > > could 
> > > > > > > also 
> > > > > > > > > create 
> > > > > > > > > > > a new "facade" Java class for mapping 
purposes, 
> > > which 
> > > > > would 
> > > > > > > have 
> > > > > > > > > > > public members for all the variables you want 
to 
> > > expose 
> > > > > to 
> > > > > > > > > > > ActionScript, and have that class make all the 
> calls 
> > > to 
> > > > > your 
> > > > > > > > > > > existing class's getters to initialize those 
> public 
> > > > > > > members.  
> > > > > > > > > You 
> > > > > > > > > > > can then refer to the variables by name (the 
> same 
> > > name 
> > > > > as in 
> > > > > > > the 
> > > > > > > > > > > Java class) from within ActionScript.
> > > > > > > > > > > 
> > > > > > > > > > > Another thing to keep in mind is that 
datagrids 
> > > expect 
> > > > > to be 
> > > > > > > > > passed 
> > > > > > > > > > > arrays (actually, anything that implements the 
> > > > > DataProvider 
> > > > > > > > > > > interface) of objects, not a single object.  
If 
> your 
> > > > > Java 
> > > > > > > calls 
> > > > > > > > > are 
> > > > > > > > > > > returning a single object instead of a list of 
> > > objects, 
> > > > > use 
> > > > > > > > > > > mx.utils.ArrayUtil.toArray() on the result to 
> > > convert it 
> > > > > to 
> > > > > > > an 
> > > > > > > > > array 
> > > > > > > > > > > in ActionScript.
> > > > > > > > > > > 
> > > > > > > > > > > Doug
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > --- In 
[email protected], "sshriyan27" 
> > > > > > > > > <[EMAIL PROTECTED]> 
> > > > > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > I'm new to Flex we're trying evaluate in our 
> > > company 
> > > > > > > whether 
> > > > > > > > > we 
> > > > > > > > > > > > should use FLEX or not. Right we have Java, 
> Struts 
> > > > > based 
> > > > > > > > > > > application.
> > > > > > > > > > > > 
> > > > > > > > > > > > I have a simple question, i have an Object 
and 
> > > still 
> > > > > > > strugling 
> > > > > > > > > to 
> > > > > > > > > > > > map that to an action script and datagrid.
> > > > > > > > > > > > How do i display values of UserProfileForm 
in 
> > > > > datagrid, 
> > > > > > > like 
> > > > > > > > > in 
> > > > > > > > > > > > Struts i used to do  
> > > > > > > > > CloserResultsForm.userProfileForm.firstname
> > > > > > > > > > > (); 
> > > > > > > > > > > > Can some one explain this to me. 
> > > > > > > > > > > > ** I can get the Single object to get 
> displayed 
> > > but 
> > > > > not 
> > > > > > > the 
> > > > > > > > > > > > inhertited ones.
> > > > > > > > > > > > 
> > > > > > > > > > > > public class CloserResultsForm implements 
> > > Serializable{
> > > > > > > > > > > >         private UserProfileForm 
userProfileForm;
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > public class UserProfileForm {
> > > > > > > > > > > >         private String username=null;
> > > > > > > > > > > >         private int userid;
> > > > > > > > > > > >         private String password=null;
> > > > > > > > > > > >         private String firstname=null;
> > > > > > > > > > > >         private String lastname=null;
> > > > > > > > > > > >         private String roleName=null;
> > > > > > > > > > > >          
> > > > > > > > > > > >     public UserProfileForm(){
> > > > > > > > > > > >          
> > > > > > > > > > > >     }
> > > > > > > > > > > >  .... // then getters and setters for the 
above
> > > > > > > > > > > > }
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>






--
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/

<*> 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