Como hacer un filtrado en un data windows, simplemente editando parte del texto.

Como hacer un filtrado en un data windows, simplemente editando parte del texto.

Ejemplo

Si se tiene en una columna con el texto "mi nombre es marco"

Y quiero hacer el filtrado editando en una caja de texto la palabra "marco", y así me muestre la fila que contiene la parte editada.

1 Respuesta

Respuesta
1

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas