Banner

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;
}