Filtrar datos de columna en DataWindow


El DataWindow cuenta con los métodos SetFilter() y Filter() para realizar filtros según el criterio que le indiquemos. 

En el ejemplo realizamos diversos tipos de filtrado:


//Filtro por rango de fecha.
dw_1.SetFilter("FechaNac>=datetime('01/01/1988') AND FechaNac<=datetime('01/01/1990')")
dw_1.Filter()

// Filtro por campo único
dw_1.SetFilter("Cod_empleado='PMA42628M'")
dw_1.Filter()

//Filtro según modelo usando caracteres comodín
dw_1.SetFilter("(Nombre like '%maria%') and (Apellido like '%rodriguez%')")
dw_1.Filter()

//Filtro por rango de número
dw_1.SetFilter("Edad >20 and  Edad<=30")
dw_1.Filter()


El método SetFilter() establece los criterios de filtrado.

El método Filter() ejecuta el filtro según los criterios establecidos.

¿Dudas?, ¿Comentarios?.




7 comentarios:

Mmemenoto dijo...

Hola…el artículo me ha sido de gran ayuda pero tuve el siguiente inconveniente
Después de filtrar quisiera hacer nuevamente un retrieve() y recuperar todas las filas ,pero al hacerlo me sigue mostrando el mismo filtro, como puedo solucionar esto?

Danier Galicia dijo...

Quitale el filtro. O sea ponele un nulo
ls_filtro = ""
dw_1.setFilter(ls_filtro)
dw_1.filter()

Hernando dijo...

Gracias. Recién me entero que el SetFilter y like necesitan "(...)".

Unknown dijo...

Un aporte cuando se desea buscar por más de un campo al momento de escribir, se puede hacer de la siguiente manera (EN POWER BUILDER):
1.- En el cuadro de texto (donde se ingresa el texto), Agregar el evento pbm_enchange y luego,
2. copias el siguiente código:

if this.text="" then
dw_1.SetFilter("")
else
dw_1.SetFilter("(dni like '%"+ trim(sle_1.text) +"%') or (apaterno like '%"+ trim(sle_1.text) +"%') or (amaterno like '%"+ trim(sle_1.text) +"%') or (nombres like '%"+ trim(sle_1.text) +"%') ")
end if
dw_1.Filter()

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

hola, tengo un caso similar y no logro hacer que funcione mi filtro con ambos apellidos y nombre, pudieran echarme una mano por favor?

Estoy modificando mi programa para que filtre con esas características pero no logro hacerlo.

En mi DW capturo por separado cada apellido y los nombres en otro campo, es decir, son 3 campos los cuales quiero filtrar en un DW grid mediante un botón filtrar, y lo deseo hacer de esta manera:

*Al escribir un apellido o parte del apellido en el sle. Apapaterno quiero que se filtren todos los campos que contengan ese apellido (ejemplo: al teclear "HER" y teclear el botón buscar arroje las coincidencias como los apellidos HERNANDEZ, HERRERA, ETC.

*Al escribir en los sle_apaterno y sle_amaterno me arroje todas las coincidencias

*Al escribir los datos exactos (appellidos y nombres completos) me busque el registro exacto.

Espero darme a entender.

Algo asi estoy haciendo, ¿qué le puedo quitar o poner para que logre ejecutarse correctamente? ¿O de que otra forma lo puedo hacer?

string ls_filter

ls_filter =" string(ap_paterno('"+STRING(sle_apaterno.text)+"')"
ls_filter += " AND STRING(ap_materno) ='"+ STRING(sle_amaterno.text)+"'"
ls_filter += " AND STRING(nombre) ='"+ STRING(sle_nombre.text)+"'"

dw_1.setredraw( false)
dw_1.setfilter (ls_filter)
dw_1.filter()
dw_1.setredraw( true)
dw_1.settransobject(sqlca)
dw_1.retrieve(ls_filter)
dw_1.setsort("fecha, id")
dw_1.sort()

tengo power builder 12.5 con el sqlAnywhere que trae por defecto

vivi dijo...

quisiera saber sobre filtrar con una variable array
quiero filtrar numero(1,2,3,4,5) de un campo? me podrían ayudar

Publicar un comentario