domingo, 26 de junio de 2011

Módulo Filtro. Buscar y Filtrar InStr

Vamos a empezar a utilizar nuestra agenda: buscar los datos que nos interesen...
Para ello vamos a utilizar el TextBoxBuscar donde introducimos las palabras (hasta 3) (completas o no) , separadas por comas. Ejemplo: “Sev,954,43”, buscara todas los registros que contengan la parte de la palabra “Sev”, como “sevilla”,”951 954 953” y “942 485 43”, sin importar el orden como aparezcan.



PUBLIC SUB TextBoxBuscar_KeyPress()
IF Key.code = Key.enter OR Key.code = Key.Return THEN
ButtonBuscar.SetFocus
endif



y el boton ButtonBuscar, que es el que contendra la llamada al procedimiento de busqueda en el modulo Filtrar.



PUBLIC SUB ButtonBuscar_Click()
DIM c AS String
DIM resultado AS Integer
DIM patrones AS NEW String[]
DIM numero_patrones AS Integer
numero_patrones = 0
patrones = Split(Upper$(TextBoxBuscar.text), ",")
numero_patrones = patrones.COUNT
IF numero_patrones = 0 THEN
patrones.Resize(3)
patrones[0] = "*"
patrones[1] = " "
patrones[2] = " "
endif
IF numero_patrones = 1 THEN
patrones.Resize(3)
patrones[1] = " "
patrones[2] = " "
endif


IF numero_patrones = 2 THEN
patrones.Resize(3)
patrones[2] = " "
ENDIF
IF numero_patrones > 3 THEN
Message.Info("solo se admiten 3 patrones de busqueda como maximo")
TextBoxBuscar.SetFocus
GOTO finfiltro
ENDIF
resultado = filtrar.ConceptoFiltro(patrones[0], patrones[1], patrones[2])
IF RESULTADO = 1 THEN
gridViewDatos.Background = Color.cyan
ELSE
GridViewDatos.Background = Color.White
ENDIF
finfiltro:
END
Como veis cada vez que se devuelva el RESULTADO=1, el gridviewDatos cambiara a color cyan, para demostrar que solo vemos los datos que contienen el filtro. Para anular este filtro crearemos un boton que haga borrar el filtro y vuelva el color blanco al gridviewDatos.



PUBLIC SUB ToolButtonCancelarFiltro_Click()
TextBoxBuscar.text = ""
ButtonBuscar_Click
END
Tambien podemos utilizar la propiedad “ToolTip” para indicar al usuario que hace dicho boton (cuando pasamos por encima del boton salda un mensaje en amarillo)
En el IDE de Gambas, buscamos la propiedad ToolTip del boton ToolbuttonCancelarFiltro y escribios ”Cancelar Filtro”




Por otro lado en el módulo filtro crearemos dos subrutinas, las verdaderas responsables de hallar los parecidos y rellenar el gridViewDatos
PUBLIC FUNCTION ConceptoFiltro(patron AS String, OPTIONAL patron1 AS String, OPTIONAL patron2 AS String) AS Integer
DIM lineas AS String
DIM a AS Integer
DIM numero AS Integer
DIM validar AS Boolean
fmain.GridViewDatos.Rows.COUNT = 0
numero = 0 'contador de filas validas (sin estar borradas)
IF patron = "*" OR patron = "" THEN
'dibujar todos los datos
titulo.rellena()
RETURN 0
ENDIF
IF patron1 = "" THEN patron1 = " "
IF patron2 = "" THEN patron2 = " "
FOR a = 0 TO var.id.COUNT - 1
lineas = ""
Lineas &= var.id[a]
Lineas &= var.dni[a]
lineas &= var.nombre[a]
lineas &= var.apellidos[a]
lineas &= var.empresa[a]
lineas &= var.puesto[a]
lineas &= var.telf_empresa[a]
lineas &= var.telf_parti[a]
lineas &= var.fax[a]
lineas &= var.movil_empresa[a]
lineas &= var.movil_parti[a]
lineas &= var.pag[a]
lineas &= var.foto[a]
lineas &= var.direccion[a]
lineas &= var.observaciones[a]
lineas &= var.fecha_datos[a]
lineas &= var.correo[a]
lineas = Upper$(lineas)
validar = dentro(lineas, patron) AND dentro(lineas, patron1) AND dentro(lineas, patron2)
IF validar THEN
numero += 1
FMain.GridViewDatos.Rows.COUNT = numero
WITH FMain
.GridViewDatos[numero - 1, 0].Picture = Picture[var.foto[a]]
.GridViewDatos[numero - 1, 1].text = var.nombre[a]
.GridViewDatos[numero - 1, 2].text = var.apellidos[a]
.GridViewDatos[numero - 1, 3].text = var.dni[a]
.GridViewDatos[numero - 1, 4].text = var.empresa[a]
.GridViewDatos[numero - 1, 5].text = var.puesto[a]
.GridViewDatos[numero - 1, 6].text = var.telf_empresa[a]
.GridViewDatos[numero - 1, 7].text = var.movil_empresa[a]
.GridViewDatos[numero - 1, 8].text = var.telf_parti[a]
.GridViewDatos[numero - 1, 9].text = var.movil_parti[a]
.GridViewDatos[numero - 1, 10].text = var.fax[a]
.GridViewDatos[numero - 1, 11].text = var.correo[a]
.GridViewDatos[numero - 1, 12].text = var.pag[a]
.GridViewDatos[numero - 1, 13].text = var.direccion[a]
.GridViewDatos[numero - 1, 14].text = var.observaciones[a]
.GridViewDatos[numero - 1, 15].text = var.fecha_datos[a]
.GridViewDatos[numero - 1, 16].text = var.id[a]
END WITH
ENDIF
Finnext:
NEXT
IF numero > 0 THEN
'SE HA ENCONTRADO PARECIDOS
RETURN 1
ELSE
RETURN 0
ENDIF
END
'-----------------------------------------------------
'funcion dentro
'-----------------------------------------------------
SUB dentro(frase AS String, patron AS String) AS Boolean
IF patron = " " THEN
RETURN 1
ELSE
RETURN InStr(frase, patron)
ENDIF
END
La funcion dentro() con la InStrucción InSr devuelve si la frase contiene el patron (true o false)


No hay comentarios:

Publicar un comentario