Я бы предложил сначала создать холст, который будет охватывать ширину VBox, а затем поместить DataGrid в холст с горизонтальным центром, равным нулю.См. Следующий пример MXML:
<mx:VBox x="0" y="0" width="100%" height="100%">
<mx:Canvas width="100%">
<mx:DataGrid horizontalCenter="0">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="col1"/>
<mx:DataGridColumn headerText="Column 2" dataField="col2"/>
<mx:DataGridColumn headerText="Column 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
</mx:VBox>
In actionscript
var vbox:VBox = new VBox();
var btn:Button = new Button;
var hb:HBox = new HBox;
var dg:DataGrid = new DataGrid();
var dc:DataGridColumn = new DataGridColumn();
var columns:Array = new Array();
columns.push(getColumn("one", "ONE"));
columns.push(getColumn("two", "TWO"));
columns.push(getColumn("three", "THREE"));
columns.push(getColumn("four", "FOUR"));
columns.push(getColumn("five", "FIVE "));
dg.columns = columns;
dg.dataProvider = temp;
dg.setStyle("horizontalCenter", 0);
var cnv:Canvas = new Canvas();
cnv.percentWidth = 100;
cnv.addChild(dg);
vbox.percentWidth = 100;
vbox.percentHeight = 100;
vbox.addChild(cnv)
accordion.addChild(vbox);