El DataWindow cuenta con los métodos SetFilter() y Filter() para realizar filtros según el criterio que le indiquemos.
Para tu caso puedes usar el operador 'like' y el comodín '%'.
Te muestro algunos ejemplos de filtrado:
// 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()
El método SetFilter() establece los criterios de filtrado.
El método Filter() ejecuta el filtro según los criterios establecidos.
Ahora, si deseas mejorar tu codigo puedes agregar en cada espacio de la cadena de búsqueda lo remplazas por el comodín '%' y luego filtras.
public function string of_like (string as_texto);
as_texto = '%'+of_remplazar( as_texto,' ','%',false)+'%'
return as_texto
end function
public function string of_remplazar (string as_cadena, string as_old, string as_new, boolean ab_ignorecase);Long ll_Start
Long ll_OldLen
Long ll_NewLen
String ls_Source
string ls_null
//Verificar parametros
If IsNull(as_cadena) or IsNull(as_old) or IsNull(as_new) or IsNull(ab_ignorecase) Then
SetNull(ls_null)
Return ls_null
End If
as_cadena = trim(as_cadena)
//obtener la longitud de los parametros
ll_OldLen = Len(as_Old)
ll_NewLen = Len(as_New)
//.
If ab_ignorecase Then
as_old = Lower(as_old)
ls_source = Lower(as_cadena)
Else
ls_source = as_cadena
End If
//Busqueda de la primera aparicion de as_Old
ll_Start = Pos(ls_Source, as_Old)
Do While ll_Start > 0
// reemplaza as_Old con as_New
as_cadena = Replace(as_cadena, ll_Start, ll_OldLen, as_New)
//
If ab_ignorecase Then
ls_source = Lower(as_cadena)
Else
ls_source = as_cadena
End If
//buscar la siguiente aparición de as_Old
ll_Start = Pos(ls_Source, as_Old, (ll_Start + ll_NewLen))
Loop
Return as_cadena
end function
event ue_keypress;call super::ue_keypress;string ls_buscado
ls_buscado = trim( text )
if ls_buscado = '' or isnull(ls_buscado) then
dw.setfilter("")
dw.filter()
else
ls_buscado = upper(of_like(ls_buscado))
dw.setfilter("UPPER(string("+columna+")) like '"+ls_buscado+"'")
dw.filter()
end if
end event