Buscador en datagrid

Tengo un catalogo de películas en un componente datagrid que se carga mediante una base de datos en access. Mi pregunta es como puedo hacer un buscador en el mismo flash que selecciones el rango en el datagrid. Por ejemplo buscar en la columna ID "0016" y que se seleccione esa película.

2 Respuestas

Respuesta
1
Ya conectaste la db de Flash a access,
Si es así con que lo hiciste,
MDM,
Es decir, la cconsulta sql depende de que gestor estas usando para conectar flash con bases de datos locales
Lo hago con MDM Zinc. Estuve averiguando mejor y creo que se puede hacer conectando access con asp, y luego mediante variables de flash a asp, pero no logro hacerlo. Te agradecería que me ayudaras
?
Es decir, todo eso lo haces mediante consultas SQL
Select * from talcosa where tablatal.columnaquequieres = "0016";
Respuesta
1
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 búsqueda.
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 mayúsculas)
---
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
Incrible respuesta... me sorprendió la verdad.
El único inconveniente es que la idea era que buscara sin necesidad de que se hayan introducido todas las palabras. Ejemplo para buscar en la columna de titulo se ingresa "enanitos" y se selecciona "blancanieves y los siete enanitos". Si no es posible no hay problema. Igual te brindare tu puntaje por lo anterior
Vaya, siendo así la cosa se complica lo ideal sería poder utilizar Expresiones Regulares pero ActionScript 2.0 no las acepta (si ya tienes el Flash 9 te explico como usarlas, porque usa ActionScript 3.0 que si puede).
Una solución sería crear una función que busque una palabra dentro de otra, no que sean inguales, per me temo que consumiría muchos recursos (y por lo tanto tiempo), y si la lista es larga no nos conviene.
...
Perdón, pero llevo como media hora pensando y me parece que esa es la única opción a parte de no utilizar una búsqueda tan exhaustiva.
En un caso así en que uno tiene que decidir entre consumir tiempo o comodidad (servirle lo que busca) al cliente, suelo darle la lección a el/ella. Me explico: podrías insertar una casilla de verificación (si sabes usar DataGrid imagino que sabes usar casillas, si no es así dímelo y te lo explico). Si la casilla está seleccionada se hace una búsqueda exhaustiva, sino solo se buscan títulos exactamente iguales a el parámetro de búsqueda.
Si te interesa te lo explico y puedo crearte las funciones, pero ahora mismo son las 6 de la mañana y como que prefiero descansar xD
Solo dime si te interesa y te explico.
Saludos
---
Sel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas