Hello Giampy,
Maybe this code can help you:
It allows 3 "filter-fields" and when you type something in it the Load_DBF is called and the selected records are filtered by the EvalFilter() function.
Code: Select all
aKL_NM := {} // dummy
DEFINE WINDOW Form_KLANTEN ;
...
@ 10,10 TEXTBOX F_NAAM ;
WIDTH 200 ;
VALUE '' ;
TOOLTIP 'Naam' ;
MAXLENGTH 30 ;
FONT 'Arial' SIZE 09 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS Form_KLANTEN.F_NAAM.BackColor := WHITE ;
ON LOSTFOCUS Form_KLANTEN.F_NAAM.BackColor := SILVER ;
ON CHANGE Load_DBF()
@ 10,215 TEXTBOX F_STRAAT ;
WIDTH 150 ;
VALUE '' ;
TOOLTIP 'Straatnaam' ;
MAXLENGTH 30 ;
FONT 'Arial' SIZE 09 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS Form_KLANTEN.F_STRAAT.BackColor := WHITE ;
ON LOSTFOCUS Form_KLANTEN.F_STRAAT.BackColor := SILVER ;
ON CHANGE Load_DBF()
@ 10,382 TEXTBOX F_GEM ;
WIDTH 170 ;
VALUE '' ;
TOOLTIP 'Woonplaats' ;
MAXLENGTH 30 ;
FONT 'Arial' SIZE 09 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS Form_KLANTEN.F_GEM.BackColor := WHITE ;
ON LOSTFOCUS Form_KLANTEN.F_GEM.BackColor := SILVER ;
ON CHANGE Load_DBF()
DEFINE GRID GRID_KL_NM
ROW 40
COL 10
WIDTH 570
HEIGHT 265
HEADERS {"Kl" , "Naam", 'Straat','Huisnr', 'Woonplaats','BTW', 'Email'}
WIDTHS { 1, 200, 150, 20, 180 , 50 , 50 }
JUSTIFY {GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_LEFT , GRID_JTFY_LEFT }
ON DBLCLICK Edit_klant()
ITEMS aKL_NM
END GRID
...
END WINDOW
function Load_DBF()
/******************/
fNAAM := UPPER(ALLTRIM(GetProperty ( 'Form_KLANTEN' , 'F_NAAM' , 'Value' )))
fSTRAAT := UPPER(ALLTRIM(GetProperty ( 'Form_KLANTEN' , 'F_STRAAT' , 'Value' )))
fGEM := UPPER(ALLTRIM(GetProperty ( 'Form_KLANTEN' , 'F_GEM' , 'Value' )))
aFILTER := {}
IF !EMPTY(fNAAM)
AADD(aFILTER, {|| fNAAM $ UPPER(ALLTRIM(NAAM)) })
ENDIF
IF !EMPTY(fSTRAAT)
AADD(aFILTER, {|| fSTRAAT $ UPPER(ALLTRIM(STRAAT)) })
ENDIF
IF !EMPTY(fGEM)
AADD(aFILTER, {|| fGEM $ UPPER(ALLTRIM(WOONPLAATS)) })
ENDIF
USE ..DBF
GO TOP
DELETE ITEM ALL FROM GRID_KL_NM OF Form_KLANTEN
DO WHILE .NOT. EOF()
IF EvalFilter()
ADD ITEM { PADL(ALLTRIM(STR(KL_NR)), 8, '0') , ALLTRIM(NAAM), ALLTRIM(STRAAT), ALLTRIM(HUISNR) ,ALLTRIM(WOONPLAATS), BTW_NR, EMAILADRES } TO GRID_KL_NM OF Form_KLANTEN
ENDIF
SKIP
ENDDO
CLOSE KLANTEN
RETURN
FUNCTION EvalFilter()
****************************
LOCAL lRETVAL := TRUE
LOCAL i
FOR i := 1 TO LEN(aFILTER)
lRETVAL := lRETVAL .AND. EVAL(aFILTER [i])
NEXT
RETURN lRETVAL
Serge