You can reassign the grid's columns property to accomplish this.  
Array methods like push don't emit the events necessary for the 
component to detect that the array has changed, thus the component 
will not update.  Try:

public function populateData() {
// code snipped
var newCols: Array = [];
newCols.push(new DataGridColumn("col1"));
newCols.push(new DataGridColumn("col2"));
dataGrid_columns = dataGrid_columns.concat(newCols);
...

Reassigning dataGrid_columns to the new Array returned by the concat
() method ought to be detected by the component and cause it to 
update.


--- In [email protected], "Paul Neyman" <[EMAIL PROTECTED]> wrote:
>
> Is it possible to add DataGrid columns dynamically, after DataGrid 
has
> been initialized?
> 
> I have the following scenario:
> 
> User loads swf file with DataGrid component in it, and passes a 
url as
> parameter. ActionScript code makes an HttpRequest call to this url,
> receives Xml data, parses it into columns and displays it in the 
DataGrid.
> 
> I do not know in advance, how many columns there will be. I tried 
to
> make 'columns' array bindable and add instances of DataGridColumn 
into
> it on the fly, but that has no effect on the DataGrid.
> 
> While DataGrid is able to figure out itself, how many columns there
> are in a data provider, it sorts them in alphabetical order. I 
need to
> set my own order.
> 
> Here's a code snippet:
> 
> MXML:
> 
> <mx:DataGrid dataProvider="{dataGrid_data}" id = "m_dataGrid" 
>              columns="{dataGrid_columns}" initialize="makeCall()">
> </mx:DataGrid>
> 
> <mx:script>
>         [Bindable]
>         public var dataGrid_data:ArrayCollection = new 
ArrayCollection();
>         [Bindable]
>         public var dataGrid_columns:Array = new Array();        
> 
> public function makeCall() {
>  // code snipped
>  ... populateData(dataGrid_data, dataGrid_columns);
>  // code snipped
> }
> 
> public function populateData() {
> // code snipped
> dataGrid_columns.push(new DataGridColumn("col1"));
> dataGrid_columns.push(new DataGridColumn("col2"));
> ...
> 
> // add data to provider
> }
> 
> While provider works perfectly, columns array does not affect the
> DataGrid at all. Is there any workaround for this?
> 
> Thanks a lot.
>


Reply via email to