Búsqueda incremental en Array filtrado

Búsqueda incremental en Array filtrado

Postby acuellar » Wed Jul 22, 2020 8:56 pm

Buenas estimados

Con éste ejemplo de Mr. RAO
Code: Select all  Expand view  RUN

#include "fivewin.ch"

Function Main()

   local oDlg, oBrw, oFont
   local aData

   USE CUSTOMER
   aData := FW_DbfToArray( "FIRST,LAST,STATE" )
    CLOSE CUSTOMER

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

   @ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE aData AUTOCOLS HEADERS "First", "Last", "State" ;
      CELL LINES NOBORDER FOOTERS AUTOSORT

   WITH OBJECT oBrw
      :lIncrFilter:= .t.
      :lSeekWild  := .t.
      :aCols[ 1 ]:bFooter  := { || "Records : " + Str( oBrw:nLen ) }
      :CreateFromCode()
     
   END
   @ 20,450 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 150,20 PIXEL OF oDlg COLOR { 0,16777215 }
   @ 10, 20 BTNBMP PROMPT "Set Filter" SIZE 200,40 PIXEL OF oDlg FLAT ;
      ACTION ( xSetFilter( oBrw ), oBrw:SetFocus() )

   @ 10,240 BTNBMP PROMPT "Clear Filter" SIZE 200,40 PIXEL OF oDlg FLAT ;
      ACTION ( xClearFilter( oBrw ), oBrw:SetFocus() )

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

Return nil

Function xSetFilter( oBrw )
   local cFilter  := ""
   local oCol, c
 
   cFilter:= "'NY' $ Upper( cValToChar( aRow[3] ) )"
   cFilter  := "{ |c,aRow,oBrw| " + cFilter + " }"
   oBrw:bFilterExp  := &( cFilter )
   oBrw:ArrayIncrFilter( "dummy" )
   oBrw:Refresh()
   oBrw:SetFocus()
Return .t.

Function xClearFilter( oBrw )
   If oBrw:nLen < Len( oBrw:aArrayData )
      oBrw:bKeyCount    := { || Len( oBrw:aArrayData ) }
      oBrw:Refresh()
   Endif
   oBrw:SetFocus()
   If oBrw:nLen >= 2
      ASort( oBrw:aArrayData,,, { |x, y| if( x[1]==y[1], x[2]<y[2], x[1]<y[1] ) })
   EndIF
return .t.
 

Al dar Set Filter la filtra por el State="NY". Necesito hacer búsqueda incremental en lo filtrado.
Una solución sería hacer algo como Scope ó pasar a un nuevo Array lo filtrado (No se como hacerlo)

Gracias por la ayuda.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Postby acuellar » Thu Jul 23, 2020 7:47 am

Help Mr. Rao
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Postby acuellar » Thu Jul 23, 2020 6:31 pm

Estimados

Lo he logrado de ésta manera
Code: Select all  Expand view  RUN

#include "fivewin.ch"

Function Main()
   local oDlg, oFont,aData:= {}
   Private oBrw,aFiltro:={}

   USE data\customer Alias calias
   aTodos:=FW_DbfToArray( "FIRST,LAST,STATE" )
   CLOSE calias
   aData:=aTodos

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

   @ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg DATASOURCE aData AUTOCOLS;
   COLUMNS 1,2,3 ;
   HEADERS "FIRST","LAST","STATE" ;
   JUSTIFY AL_LEFT,AL_LEFT, AL_CENTER ;
   COLSIZES 200,200,50;
   CELL LINES NOBORDER FOOTERS AUTOSORT
 
   WITH OBJECT oBrw
      :lIncrFilter:= .t.
      :lSeekWild  := .t.
      :aCols[ 1 ]:bFooter  := { || "Records : " + Str( oBrw:nLen ) }
      :CreateFromCode()
     
      WITH OBJECT :FIRST
        :bLClickHeader:= {|| Inicio() }
      END
      WITH OBJECT :LAST
        :bLClickHeader:= {|| Inicio() }
      END
      WITH OBJECT :STATE
        :bLClickHeader:= {|| Inicio() }
      END
   END
   @ 20,450 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 150,20 PIXEL OF oDlg COLOR { 0,16777215 }
   @ 10, 20 BTNBMP PROMPT "Set Filter" SIZE 200,40 PIXEL OF oDlg FLAT ;
      ACTION ( xSetFilter( oBrw ), oBrw:SetFocus() )

   @ 10,240 BTNBMP PROMPT "Clear Filter" SIZE 200,40 PIXEL OF oDlg FLAT ;
      ACTION ( xClearFilter( oBrw ), oBrw:SetFocus() )

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

Return nil

Function xSetFilter( oBrw )
   If Len(aFiltro)=0
     USE data\CUSTOMER Alias cAlias
     aFiltro := FW_DbfToArray( "FIRST,LAST,STATE",{ || FIELD->STATE = "NY" } )
     CLOSE cAlias
     aData:=aFiltro
     oBrw:SetArray(aData,.T.)
    Endif
   oBrw:aCols[1]:SetOrder()
   ASort( oBrw:aArrayData,,, { |x, y| if( x[1]==y[1], x[2]<y[2], x[1]<y[1] ) })
   Inicio()

Return .t.

Function xClearFilter( oBrw )
   If len(aFiltro)>0
     aFiltro:={}
     aData:=aTodos
     oBrw:SetArray(aData,.T.)
   Endif
   oBrw:aCols[1]:SetOrder()
   If oBrw:nLen < Len( oBrw:aArrayData )
      oBrw:bKeyCount    := { || Len( oBrw:aArrayData ) }
   Endif
   ASort( oBrw:aArrayData,,, { |x, y| if( x[1]==y[1], x[2]<y[2], x[1]<y[1] ) })
   Inicio()
return .t.
*
Function Inicio()
  oBrw:Seek( "" )
  oBrw:cSeek:="";oBrw:oSeek:Refresh()
  oBrw:Refresh();oBrw:Setfocus();oBrw:GoTop()
Return .T.
 

Debe haber otra manera sin necesidad de estar cargando la tabla desde la DBF

Lo que no he podido lograr es que al hacer doble clip sobre el Header la búsqueda se por esa columna

Gracias por la ayuda.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Postby cnavarro » Thu Jul 23, 2020 7:00 pm

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Búsqueda incremental en Array filtrado

Postby acuellar » Fri Jul 24, 2020 2:12 pm

Muchas gracias estimado Cristobal

No encontré nada de lo que necesito.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Postby nageswaragunupudi » Fri Jul 24, 2020 11:32 pm

Al dar Set Filter la filtra por el State="NY". Necesito hacer búsqueda incremental en lo filtrado.


Set
Code: Select all  Expand view  RUN

:lIncrFilter := .F.
 


You may set the value of :lSeekWild to .T. or .F. as you require.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Búsqueda incremental en Array filtrado

Postby acuellar » Sat Jul 25, 2020 1:15 pm

Thanks Mr. Rao

I solved it with: oBrw:cFilterFld:="COLUMN"

Regards,
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 46 guests