Actualizar LIstbox

Actualizar LIstbox

Postby jponce » Fri Jun 20, 2008 4:24 pm

Hola a todos

Actualmente tengo un Dialogo en el que tengo un get y un boton Buscar.

Luego de darle buscar refresco mi listbox y despliego los datos.

Lo que quiero es obviar el boton buscar y que desaparesca el get,
es decir lo que quiero es escribir en el formulario y e vez que salga el get salga un osay con lo que estoy escribiendo y automaticamente se este refrezcando el Listbox con lo que estoy buscando.

Si pongo Julio que me aparezcan todo lo que contenga Julio sin necesidad de escribir en un get y luego darle buscar.


De antemano les agradezco su ayuda

Atentamente,
Julio Ponce[/img]
jponce
 
Posts: 197
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Postby Manuel Aranda » Fri Jun 20, 2008 5:57 pm

Hola Julio:

Aquí te pongo un trozo de código que seguramente podrás adaptar a tus necesidades. Tal y como está te va haciendo un filtrado de la base de datos por los caracteres que vayas introduciendo, a la vez que te los refleja en un oSay.

Code: Select all  Expand view  RUN

LOCAL cTecla:=""

.............................
...............................

     REDEFINE LISTBOX oBj1[9] ;
            FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
            +" "+AGENDA->Texto+" ",;
            +" "+AGENDA->Ubicado+" ";
            FIELDSIZES 16,600,300;
            HEADERS "A", "       Texto", "          Ubicación archivo asociado o dirección internet";
            ID 200;
            FONT oFont1;
            ON LEFT DBLCLICK (AgendaAltaModi(oBj1[9],"Ver/Modificar texto",.F.),oBj1[9]:Refresh(),oBj1[9]:SetFocus(),oBtnVer:Refresh());
            OF oDlg

     
     oBj1[9]:bkeydown:={|nKey|DOKEYCHECK(nKey,oBj1[9],oSay2,oDlg,oBj1,@cTecla)}


     REDEFINE SAY oSAY2   ID 800 OF oDlg
     
..............................
..............................

************************************************************
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oSay2,oDlg,oBj1,cTecla)
************************************************************
*------SINGLE CHARACTER BROWSE SEARCHER----------------------
  && Note ASCII values: 65-90  are Capital A through Z.
   &&                  : 97-122 are lowercase a through z.
   &&                  : 48-57  are numbers 0-9.
   &&                  : 13     used below is for a RETURN key hit.
//
IF nKEY>=65 .AND. nKEY<=90 .OR. nKEY>=97 .AND. nKEY<=122 .OR. nKEY >=48 .AND. nKEY<=57 .OR. nKey = VK_SPACE
      //
      cTecla:=cTecla+UPPER(CHR(nKEY))
      //
      oSay2:SetText(cTecla)
      oSay2:Refresh()
      FilTexto(cTecla,"AGENDA",oDlg,oLbx)
      oLbx:oVscroll:setpos(recno())   && Refresh browser object sequence...
      oLbx:refresh()                  &&
      SysRefresh()
      RETURN( NIL )                 
ENDIF
   //

   DO CASE
     */
      CASE nKEY == VK_BACK
           //
           cTecla=substr(cTecla,1,len(cTecla)-1)
           FilTexto(cTecla,"AGENDA",oDlg,oLbx)
           oSay2:SetText(cTecla)
           oSay2:Refresh()
           PonNumero("AGENDA",oBj1)

      CASE nKEY == VK_DELETE
           //
           cTEcla=""
           FilTexto(cTecla,"AGENDA",oDlg,oLbx)
           oSay2:SetText(cTecla)
           oSay2:Refresh()


  ENDCASE
       //
RETURN( NIL )

******************************************
FUNCTION FilTexto(cFiltro,cFile,oDlg,oLbx)
******************************************
cFiltro := ALLTRIM(cFiltro)
IF ! EMPTY(cFiltro)
(cFile)->(DBSETFILTER({|| AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0 },"AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0" ))
ELSE
(cFile)->(DBCLEARFILTER())
ENDIF
(cFile)->(DBGOTOP())
oLbx:Refresh()
oDlg:Update()
RETURN(.T.)

Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby jponce » Fri Jun 20, 2008 8:56 pm

Gracias,

Estare probando con Mysql y te cuento,
Muy Agradecido

Atentamente,
Julio Rodrigo Ponce Hinestroza



Manuel Aranda wrote:Hola Julio:

Aquí te pongo un trozo de código que seguramente podrás adaptar a tus necesidades. Tal y como está te va haciendo un filtrado de la base de datos por los caracteres que vayas introduciendo, a la vez que te los refleja en un oSay.

Code: Select all  Expand view  RUN

LOCAL cTecla:=""

.............................
...............................

     REDEFINE LISTBOX oBj1[9] ;
            FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
            +" "+AGENDA->Texto+" ",;
            +" "+AGENDA->Ubicado+" ";
            FIELDSIZES 16,600,300;
            HEADERS "A", "       Texto", "          Ubicación archivo asociado o dirección internet";
            ID 200;
            FONT oFont1;
            ON LEFT DBLCLICK (AgendaAltaModi(oBj1[9],"Ver/Modificar texto",.F.),oBj1[9]:Refresh(),oBj1[9]:SetFocus(),oBtnVer:Refresh());
            OF oDlg

     
     oBj1[9]:bkeydown:={|nKey|DOKEYCHECK(nKey,oBj1[9],oSay2,oDlg,oBj1,@cTecla)}


     REDEFINE SAY oSAY2   ID 800 OF oDlg
     
..............................
..............................

************************************************************
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oSay2,oDlg,oBj1,cTecla)
************************************************************
*------SINGLE CHARACTER BROWSE SEARCHER----------------------
  && Note ASCII values: 65-90  are Capital A through Z.
   &&                  : 97-122 are lowercase a through z.
   &&                  : 48-57  are numbers 0-9.
   &&                  : 13     used below is for a RETURN key hit.
//
IF nKEY>=65 .AND. nKEY<=90 .OR. nKEY>=97 .AND. nKEY<=122 .OR. nKEY >=48 .AND. nKEY<=57 .OR. nKey = VK_SPACE
      //
      cTecla:=cTecla+UPPER(CHR(nKEY))
      //
      oSay2:SetText(cTecla)
      oSay2:Refresh()
      FilTexto(cTecla,"AGENDA",oDlg,oLbx)
      oLbx:oVscroll:setpos(recno())   && Refresh browser object sequence...
      oLbx:refresh()                  &&
      SysRefresh()
      RETURN( NIL )                 
ENDIF
   //

   DO CASE
     */
      CASE nKEY == VK_BACK
           //
           cTecla=substr(cTecla,1,len(cTecla)-1)
           FilTexto(cTecla,"AGENDA",oDlg,oLbx)
           oSay2:SetText(cTecla)
           oSay2:Refresh()
           PonNumero("AGENDA",oBj1)

      CASE nKEY == VK_DELETE
           //
           cTEcla=""
           FilTexto(cTecla,"AGENDA",oDlg,oLbx)
           oSay2:SetText(cTecla)
           oSay2:Refresh()


  ENDCASE
       //
RETURN( NIL )

******************************************
FUNCTION FilTexto(cFiltro,cFile,oDlg,oLbx)
******************************************
cFiltro := ALLTRIM(cFiltro)
IF ! EMPTY(cFiltro)
(cFile)->(DBSETFILTER({|| AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0 },"AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0" ))
ELSE
(cFile)->(DBCLEARFILTER())
ENDIF
(cFile)->(DBGOTOP())
oLbx:Refresh()
oDlg:Update()
RETURN(.T.)

jponce
 
Posts: 197
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Postby jponce » Sat Jun 21, 2008 3:02 pm

Gracias
Ya lo hice con Mysql Gracias.

Solo tengo que ver por que es un poco lento.

Pero ya tengo la idea.

Atentamente
Julio Rodrigo Ponce Hinestroza
jponce
 
Posts: 197
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 43 guests