Flex: costruire un (advanced)DataGrid da codice

Ok. Ci troviamo in difficoltà nel costruire da codice un AdvancedDataGrid in flex…
Niente paura!
Ammettiamo di dover ottenere un qualcosa di questo tipo:
AdvancedDatagrid

Ammettiamo poi di

  • aver popolato da qualche parte il nostro dataprovider che si occuperà di popolare il nostro datagrid
  • avere un canvas contenitore con id=”cnvTabellaRiepilogo”
  • dover eseguire una qualche azione quado l’utente clicca su una riga del nostro datagrid

In tali ipotesi, ecco cosa dobbiamo scrivere:


private function init():void {
//var dataProvider:ArrayCollection = new ArrayCollection();
if (advDataGrid) {
return;
} else {
var advDataGrid:AdvancedDataGrid = new AdvancedDataGrid();
advDataGrid.id="dgRiepilogoRegione";
advDataGrid.displayDisclosureIcon = false;
advDataGrid.sortableColumns = false;
advDataGrid.displayItemsExpanded=false;
advDataGrid.sortExpertMode=true;
advDataGrid.editable = "false";
advDataGrid.horizontalScrollPolicy = "off";
advDataGrid.verticalScrollPolicy = "auto";
advDataGrid.addEventListener(ListEvent.ITEM_CLICK, itmeClick);

advDataGrid.percentWidth=100;
advDataGrid.minWidth=700;
advDataGrid.percentHeight = 100;
var colsArray:Array=[];
var cols:Array=new Array("Prev", "Cons");
var colonna1:AdvancedDataGridColumn = new AdvancedDataGridColumn();
colonna1.headerText="Comunità Montana";
colonna1.width=250;
colonna1.dataField = "comunita";

colsArray.push(colonna1);
for (var i:int=1; i>=0; i--) {
var columnGroup:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup();
columnGroup.headerText="201"+i;
columnGroup.editable=false;
columnGroup.sortable=false;
columnGroup.children = [];
columnGroup.children.push(new AdvancedDataGridColumn(cols[0]));
columnGroup.children.push(new AdvancedDataGridColumn(cols[1]));
columnGroup.children[0].dataField="prev"+i;
columnGroup.children[0].setStyle("textAlign", "center");
columnGroup.children[0].editable=false;
var cb:ClassFactory = new ClassFactory(mx.controls.CheckBox);
cb.properties = {enabled:false};
columnGroup.children[0].itemRenderer = cb;
columnGroup.children[1].dataField="cons"+i;
columnGroup.children[1].setStyle("textAlign", "center");
columnGroup.children[1].itemRenderer = cb;
colsArray.push(columnGroup);
}

advDataGrid.groupedColumns = colsArray;

advDataGrid.dataProvider = _dataProviders.dpRiepilogoCM;

advDataGrid.validateNow();

cnvTabellaRiepilogo.addChild(advDataGrid);

}
}

Si è appositamente voluto usare i checkbox (riga 39 del codice) perché si è ritenuto utile mostrare come sia possibile creare tali oggetti in questa particolare situazione.