sábado, 19 de septiembre de 2009

TFiltroDinamico: Una forma fácil y sencilla de generar filtros

Cuando desarrollamos aplicaciones es común que se realicen búsquedas por criterios definidos previamente --por lo regular uno, dos o tres campos--, pero...., que pasa si nos piden buscar por una combinación de todos los campos contenidos en nuestra tabla.

Ya me imagino la secuencia de pasos:

Para cada campo de la tabla:
  1. Pulsar Shift + Clic en el componente TLabel
  2. Cambiar los nombre del TLabel con el nombre del campo
  3. Pulsar Shift + Clic en el componente TComboBox para indicar los criterios (menor que, mayor que, etc..)
  4. Poner los cuadros de entrada para cada campo
y así sucesivamente.

Para facilitar ésta tarea, decidí crear la clase TFiltroDinamico, que nos apoya generando los nombres de los campos, combo boxes, cuadros de entrada y algo muy importante, si el campo es de tipo fecha genera un TDateTimePicker.

Un ejemplo de su uso es el siguiente:


// para crear una instancia
filtroDinamico := TFiltroDinamico.Create;
// dataset del cual toma los campos
filtroDinamico.dataSetLocal := Query1;
// scrollbox donde generan los filtros
filtroDinamico.scrlFiltro := scrlCampos;

// libera los filtros que se han creado
filtroDinamico.liberaComponentes;
// genera en el scrollbox los filtros
filtroDinamico.inicializaFiltro;

// obtiene la condición con el valor de cada campo.
filtroDinamico.obtenFiltro;
Este es un ejemplo de una aplicación que utiliza la clase TFiltroDinamico, el recuadro en rojo contiene los campos generados a partir de la información generada por la consulta, el recuadro en verde indica el valor que se asignó a cada campo.

Te invito a que descargues y pruebes TFiltroDinamico. Puedes probar la aplicación de ejemplo y compartirme que te parece.