Búsqueda incremental en Array filtrado

Post Reply
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Búsqueda incremental en Array filtrado

Post by acuellar »

Buenas estimados

Con éste ejemplo de Mr. RAO

Code: Select all

#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: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Post by acuellar »

Help Mr. Rao
Saludos,

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

Re: Búsqueda incremental en Array filtrado

Post by acuellar »

Estimados

Lo he logrado de ésta manera

Code: Select all

#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
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Búsqueda incremental en Array filtrado

Post by cnavarro »

C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Post by acuellar »

Muchas gracias estimado Cristobal

No encontré nada de lo que necesito.
Saludos,

Adhemar C.
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Búsqueda incremental en Array filtrado

Post by nageswaragunupudi »

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

Code: Select all

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

G. N. Rao.
Hyderabad, India
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Búsqueda incremental en Array filtrado

Post by acuellar »

Thanks Mr. Rao

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

Regards,
Saludos,

Adhemar C.
Post Reply