|
Es posible. Al crear el DataGrid deberías asignarle el dataProvider, no? Bien pues lo que haremos es trabajar con el array que contiene dataProvider para buscar la película. Por ejemplo, si el array que se asigna al dataProvider se llama "lista" tu código sería así:
--- miDataGrid.dataProvider = lista; ---
Entonces solo nos queda buscar en ese array el índice de la película. Para este ejemplo, utilizaré la película con el ID 56, de un array que contenga 1000 películas.
Ahora deberemos crear una función de busqueda. Para ello nos dividimos, dependiendo si el array está ordenado o desordenado:
Una vez creadas ambas funciones se utilizan de la misma forma. Al final explico cómo.
===============================================
ORDENADO: Si el array está ordenado iremos dividiendo el array por la mitad, y seguiremos buscando en la mitad que contenga el ID.
--- function buscar(array:Array, ID, columna, minimo:Number, maximo:Number) { if (minimo == undefined) minimo = 0; if (maximo == undefined) maximo = array.length; var comparar = ((maximo - minimo) / 2) + minimo; if (columna == undefined) { if (array[comparar] == ID) return comparar; else if (array[comparar] < ID) buscarOrdenada(array, ID,, comparar, maximo); else buscarOrdenada(array, ID,, minimo, comparar); } else { if (array[comparar][columna] == ID) return array[comparar]; else if (array[comparar][columna] < ID) buscar Ordenada(array, ID, columna, comparar, maximo); else buscarOrdenada(array, ID, columna, minimo, comparar); } return false; } ---
Esta función mira si el objetivo esta en la primera o en la segunda mitad, entonces se llama a si misma pero buscando en la mitad resultante. Llegará un momento en que la mitad resultante sea una sola película.
===============================================
DESORDENADO:
Si el array está desordenado solo queda analizar uno por uno los items:
--- function buscar(array:Array, ID, columna) { if (columna == undefined) for (iTemp in array) if (array[iTemp] == ID) return iTemp; else for (iTemp in array) if (array[iTemp][columna] == ID) return array[iTemp]; return false; } ---
===============================================
Para utilizarlo basta con que escribas: (Reemplaza el texto en mayusculas)
--- var pelicula:Object = buscar(LISTA, ID, COLUMNA); ---
Para ambas versiones es necesario indicar los siguientes parámetros:
LISTA: array que contiene las películas. ID: El texto, numero u objeto que se buscará. COLUMNA: Variable o número de columna que contiene el ID
Si estás buscando la película que en la columna "Precio" tenga el valor "13.00" para subir el precio sería así:
--- var pelicula:Object = buscar(array, "13.00", "Precio"); trace(pelicula.Nombre); pelicula.Precio = "14.00"; ---
Incluso, si cada item del array es otro array (array[0][0]) puedes indicar el número de la columna:
--- var pelicula:Object = buscar(array, "13.00", 7); trace(pelicula[0]); pelicula[7] = "14.00"; --- Ambas funciones devuelven false si no coincide ningún resultado.
Una vez copiado el código de la función (dependiendo si tienes el array ordenado o no) solo tienes que ejecutarla como en los ejemplos.
Y recibirás de la función el objeto que contiene todos los datos de la película
Ante cualquier problema no dudes volver a preguntar.
Suerte --- Sel
|