Thanks Nayan,

The updateComplete event allowed me to access the data.

Again, here are my requirements:

- DataGrid bound to XML which is loaded from an HttpService object
- I want to automatically select the first row in the grid when the 
application loads.
- I want to populate form values with the XML data from that first 
selected row.

So in order to do this:

in the App's creationComplete event handler I select that first row:

dg.selectedIndex = 0;
dg.validateNow();
dg.scrollToIndex(0);


Then in the DataGrid's updateComplete event I have to check to see if 
the data is of type XMLList and also check a boolean to see if this 
is the first time the app has loaded.  The data won't be of type 
XMLList until after the HttpService's result event fires and that XML 
data is assigned to the DataGrid.


private function dgUpdateComplete(event:FlexEvent):void{        
                                
   if((!(event.target.dataProvider is ArrayCollection) &&   
selectFirstRowOnLoad == true))){
        
// Note that event.target.dataProvider is of type ArrayCollection 
before the datagrid has been assigned the XML data.
                                        
// Populate form controls for first row

   dg.selectedItem = event.target.dataProvider[0];
   populateForm(event.target.dataProvider[0]); // function to fill    
form controls
   selectFirstRowOnLoad = false;  // set class level boolean to false

}
                                
}



Hope this helps anyone else out there that has a similar requirement.



--- In [email protected], "Nayan Savla" <[EMAIL PROTECTED]> 
wrote:
>
> i used updateComplete to listen for changes in the dataProvider.
> 
> private function categoryDataChanged(event:FlexEvent):void{
>                               if(event.currentTarget == 
categoryCombo){
>                                       //this is to prevent it from 
collecting garbage data for the first time
>                                       try {
>                                               if 
(event.target.selectedItem.data != -1) {
>                                                       
>                                               }
>                                       } catch(e:Error){
>                                               //do nothing
>                                       }
> 
>                               }
>                       }
> 
> this is how my listener is implemented, i had to use try block 
because
> the first time the value would be null and i wouldn't get error in
> flex.
> 
> Nayan
> On Fri, Feb 29, 2008 at 4:03 PM, Tracy Spratt <[EMAIL PROTECTED]> wrote:
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > I have found that whenever you programatically assign a 
dataProvider, you
> > must use callLater() to invoke any methods that affect the visual 
UI.
> >
> >
> >
> > Tracy
> >
> >
> >
> >  ________________________________
> >
> >
> > From: [email protected] 
[mailto:[EMAIL PROTECTED] On
> > Behalf Of guitarguy555
> >  Sent: Friday, February 29, 2008 3:50 PM
> >  To: [email protected]
> >  Subject: [flexcoders] Re: DataGrid - programmatically selecting 
the first
> > row - selectedItem is null
> >
> >
> >
> >
> >
> >
> > Thanks for the replies - well, I tried that suggestion (
> >  dg.selectedItem = xmlData[0] )and the XML is null at this point.
> >
> >  Yes, the XML data is not available yet when the App's creation
> >  complete is called. I should have mentioned as well that this
> >  DataGrid and form are in a component. The component's DataGrid 
data
> >  source is set from the mxml declaration in the application.
> >
> >  The XML data is retrieved from an HTTPSService object. So in the
> >  main App, once this XML data is retrieved, I now try to set the
> >  selectedItem as follows in the result handler:
> >
> >  private function onHandleGetData(event:ResultEvent):void{
> >
> >  tableData = event.result as XML;
> >  dg.dgSelector.selectedItem = tableData[0];
> >
> >  }
> >
> >  When I step through the code, I can see that the result contains 
the
> >  desired XML. But when I step into the code on that last line - 
where
> >  I try to assign a value to dg.selectedItem, Flex ends up in the
> >  ListBase.as clearSelected() function.
> >
> >  In this function these 2 lines get called:
> >
> >  _selectedIndex = -1;
> >  _selectedItem = null;
> >
> >  which cancel out the assignment!!
> >
> >  Has anybody else run into this situation?
> >
> >  I just want to programmatically select that first row and have 
the
> >  corresponding form populate with that row's values.
> >
> >  Given that the Grid and form are in a component, this might
> >  complicate things but it seems to me that this would be a common
> >  scenario - having a master/detail Grid/Form in a component.
> >
> >  Thanks
> >
> >  --- In [email protected], "letterpigeon" <ban.luc@> 
wrote:
> >  >
> >  > I think this might be a race condition problem. Your data 
might not
> >  > have been loaded when the creationComplete event is fired (it 
is
> >  fired
> >  > after all the UI components are created, but any service call 
you
> >  made
> >  > to load up the data might not have returned yet).
> >  >
> >  > Ban
> >  >
> >  > --- In [email protected], "guitarguy555" <djohnson29@>
> >  wrote:
> >  > >
> >  > > In my application, I have a datagrid that is bound to XML 
data.
> >  The
> >  > > datagrid has a corresponding form that contains the details.
> >  When
> >  > > the user clicks on a row in the datagrid the form populates 
with
> >  the
> >  > > values from the DataGrid's selectedItem.
> >  > >
> >  > > I want to programatically select the first row in my DataGrid
> >  when
> >  > > the application loads.
> >  > >
> >  > > In order to do this, I have to call validateNow() and
> >  scrollToIndex()
> >  > >
> >  > > eg.
> >  > >
> >  > > dg.selectedIndex = 0;
> >  > > dg.validateNow();
> >  > > dg.scrollToIndex(0);
> >  > >
> >  > > I put this code in the Applications creationComplete handler.
> >  > >
> >  > > This all works great - the first row is highlighted and 
selected
> >  and
> >  > > the selectedIndex is 0. The problem is that I can't access 
the
> >  data
> >  > > to populate the details form. When I try to retrieve the
> >  > > dg.SelectedItem property - it is null.
> >  > >
> >  > > How does one programatically select the first row in the 
grid on
> >  load
> >  > > AND access the row data?
> >  > >
> >  > > thanks
> >  > >
> >  >
> >
> >
>


Reply via email to