Ultima revisión 04/08/2010
Cambiar el valor del padre del item seleccionado en un DataGrid con jerarquía de datos
Supongamos que tenemos un arrayCollection con unos campos, p.e., id, nombre y
estado (dónde estado es una imagen y los demás son de tipo texto) y supongamos también que tenemos un AdvancedDataGrid asociado con ese array. Pues bien, queremos pinchar en un elemento del AdvancedDataGrid y que se ponga el elemento padre (si lo tiene) al mismo valor que el que tenemos seleccionado y por supuesto, todos sus hijos (si es que los tiene).
Vamos a declarar una variable changeState que tendrá la imagen a asignar.
Después recorreremos el AdvancedDataGrid desde el elemento seleccionado hasta dar con su padre o hasta el índice 0, que sería el primer elemto del array del AdvancedDataGrid, y si lo encontramos, le asignaremos el valor dado.
var dg:AdvancedDataGrid = adg_prueba; // el id del AdvancedDataGrid a usar, con el arrayCollection, ...
var changeState:String = 'assets/img/cancel.png';
if (dg.selectedItem.state == 'assets/img/cancel.png') changeState = 'assets/img/apply.png';
var idx:uint = dg.selectedIndex;
var obj:Object = dg.selectedItem;
var x:uint;
var y:uint;
var z:uint;
// con esto cambiamos a changeState todos sus hijos.
dg.selectedItem.state = changeState;
if (dg.selectedItem.children != null){
for(y = 0; y < dg.selectedItem.children.length; y++){
dg.selectedItem.children[y].state = changeState;
if (dg.selectedItem.children[y].children != null){
for(z = 0; z < dg.selectedItem.children[y].children.length; z++){
dg.selectedItem.children[y].children[z].state = changeState;
}
}
}
}
// con esto cambiamos a changeState su padre.
var enco:Boolean = false;
idx = dg.selectedIndex;
x = idx;
while (x > 0 && !enco){
x--;
dg.selectedIndex = x;
if (changeState == 'assets/img/apply.png' && dg.selectedItem.state == 'assets/img/cancel.png'){
dg.selectedItem.state = 'assets/img/apply.png';
} else if (changeState == 'assets/img/cancel.png' && dg.selectedItem.state == 'assets/img/apply.png'){
dg.selectedItem.state = 'assets/img/apply.png';
}
enco = true;
}