When displaying data whose structure is not known, Flex does a good job when the records are given in a Array of objects. It introspects the objects and renders them in a decent way. It is good for displaying data from adhoc sql queries. When the data is in XML form the datagrid needed the columns to be defined upfront. Below is a small piece of code which introspects the first record and makes it possible.
private function render(detailXml:XML):void
{
if (detailXml != null)
{
var recordL:XMLListCollection = new XMLListCollection(detailXml.children());
if (recordL.length > 0)
{
var dg:DataGrid = new DataGrid();
dg.percentHeight = 100;
dg.percentWidth = 100;
dg.columns = this.createColumns(recordL.getItemAt(0) as XML);
dg.dataProvider = recordL;
this.addChild(dg);
}
}
}
private function createColumns(recordXml:XML):Array
{
var colL:Array = new Array();
for each (var eXml:XML in recordXml.elements())
{
var colName:String = eXml.localName();
colL.push(this.createColumn(colName));
}
return colL;
}
private function createColumn(field:String):DataGridColumn
{
var column:DataGridColumn = new DataGridColumn();
column.dataField = field;
column.headerText = field;
column.headerWordWrap = true;
column.wordWrap = true;
return column;
}