In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Filtro en ArrayBrowse
Filtro en ArrayBrowse
¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
Necesito, por ejemplo, visionar SOLO los registros que en la primera columna
empiezen por "A".
Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
Gracias.
Un Saludo,
Xevi.
Necesito, por ejemplo, visionar SOLO los registros que en la primera columna
empiezen por "A".
Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
Gracias.
Un Saludo,
Xevi.
Filtro en ArrayBrowse
Hola Xevi,
"xEvi" para que lo vea Inazio.
Es broma, espero que lo tomes a bien, Ignacio.
Xevi escribió:
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
Bueno, a ver, de paso servirá para probar la 99.71 del CVS o 99.80 Xailer.
Lo he comprobado con la nueva versión xharbour y lo que pasa si te olvidas de los dejes de C, nada cosas mías, tú procura
entender el código y si no preguntas.
Suponiendo que no dispongas ya de una copia de la Array de datos.-
CLASS TMyClass FROM TForm // Supongo
...
DATA aMyArrayData INIT {}
DATA aCopiaArrayData INIT {} // No los metas en la misma sentencia.
...
METHOD SetFilterON()
METHOD SetFilterOFF()
...
ENDCLASS
METHOD SetFilterON() CLASS TMyClass
::aCopiaArrayData := AClone(::oArrayBrowse1:aArrayData)
AEval(::oArrayBrowse1:aArrayData, {|m| iif(m[1] >= "A", AAdd(::aMyArrayData,m),nil)})
ASize(::oArrayBrowse1:aArrayData,0) // Dejes de C/C++
::oArrayBrowse1:aArrayData := ::aMyArrayData
::oArrayBrowse1:Refill()
RETURN Nil
METHOD SetFilterOFF() CLASS TMyClass
::oArrayBrowse1:aArrayData := AClone(::aCopiaArrayData)
::oArrayBrowse1:Refill()
ASize(::aMyArrayData,0); ASize(::aCopiaArrayData,0) // Dejes de C/C++
RETURN Nil
Un saludo
Xavi
"xEvi" para que lo vea Inazio.
Es broma, espero que lo tomes a bien, Ignacio.

Xevi escribió:
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
Bueno, a ver, de paso servirá para probar la 99.71 del CVS o 99.80 Xailer.
Lo he comprobado con la nueva versión xharbour y lo que pasa si te olvidas de los dejes de C, nada cosas mías, tú procura
entender el código y si no preguntas.
Suponiendo que no dispongas ya de una copia de la Array de datos.-
CLASS TMyClass FROM TForm // Supongo
...
DATA aMyArrayData INIT {}
DATA aCopiaArrayData INIT {} // No los metas en la misma sentencia.
...
METHOD SetFilterON()
METHOD SetFilterOFF()
...
ENDCLASS
METHOD SetFilterON() CLASS TMyClass
::aCopiaArrayData := AClone(::oArrayBrowse1:aArrayData)
AEval(::oArrayBrowse1:aArrayData, {|m| iif(m[1] >= "A", AAdd(::aMyArrayData,m),nil)})
ASize(::oArrayBrowse1:aArrayData,0) // Dejes de C/C++

::oArrayBrowse1:aArrayData := ::aMyArrayData
::oArrayBrowse1:Refill()
RETURN Nil
METHOD SetFilterOFF() CLASS TMyClass
::oArrayBrowse1:aArrayData := AClone(::aCopiaArrayData)
::oArrayBrowse1:Refill()
ASize(::aMyArrayData,0); ASize(::aCopiaArrayData,0) // Dejes de C/C++

RETURN Nil
Un saludo
Xavi
Filtro en ArrayBrowse
Xevi,
Casi saliéndome por los cerros de íšbeda te podría decir que el array lo
metas en un memdataset y de ahí en un tdbBrowse. Ahí tienes métodos
específicos para filtrar y esas cosas.
--
Saludos,
José Luis Capel
www.capelblog.com vuelve a estar online!!
"Xevi" <xevicomas@gmail.com> escribió en el mensaje de noticias
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
Casi saliéndome por los cerros de íšbeda te podría decir que el array lo
metas en un memdataset y de ahí en un tdbBrowse. Ahí tienes métodos
específicos para filtrar y esas cosas.
--
Saludos,
José Luis Capel
www.capelblog.com vuelve a estar online!!
"Xevi" <xevicomas@gmail.com> escribió en el mensaje de noticias
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Filtro en ArrayBrowse
Xevi,
No está documentado ningún SetFilter() en TArrayBrowse, ya que se trata de
un método Reservado. No obstante están todos los fuentes disponibles por si
quieres echarles un vistazo.
Te recomiendo que utilices TMemDataset y TDBBrowse o bien utilices te
construyas tu la matriz en cada caso utilizando aScan() sobre la matriz
original.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
No está documentado ningún SetFilter() en TArrayBrowse, ya que se trata de
un método Reservado. No obstante están todos los fuentes disponibles por si
quieres echarles un vistazo.
Te recomiendo que utilices TMemDataset y TDBBrowse o bien utilices te
construyas tu la matriz en cada caso utilizando aScan() sobre la matriz
original.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Filtro en ArrayBrowse
Gracias a todos por vuestras respuestas.
Tomaré nota de vuestros consejos.
La verdad es que no he utilizado los MemDataSets todavía, y creo que será
hora ya de meterme en alguno para aprender su uso.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje de noticias
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
Tomaré nota de vuestros consejos.
La verdad es que no he utilizado los MemDataSets todavía, y creo que será
hora ya de meterme en alguno para aprender su uso.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje de noticias
news:470755ac$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ¿Cómo puedo aplicar un filtro a un ArrayBrowse sin utilizar lFilterBar???
> Necesito, por ejemplo, visionar SOLO los registros que en la primera
> columna empiezen por "A".
> Algo como ... ::oArrayBrowse1:SetFilter( ::oArrayBrowse1:aCols[1] >= "A" )
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
Filtro en ArrayBrowse
Xevi escribió:
> Gracias a todos por vuestras respuestas.
> Tomaré nota de vuestros consejos.
> La verdad es que no he utilizado los MemDataSets todavía, y creo que
> será hora ya de meterme en alguno para aprender su uso.
>
> Un Saludo,
> Xevi.
>
Bueno, sniff, también podría haberte programado esto.-
CLASS TArrayBrowse FROM XArrayBrowse
METHOD Filtra( bFiltro )
ENDCLASS
// bFiltro : Code Block de Filtrado
// Dependiente de SubArray de ArrayData
// Ejemplo : { |m| m[1] >= "A" }
// bFiltro == nil : Elimina Filtrado
METHOD Filtra( bFiltro ) CLASS TArrayBrowse
Local aM, aData := {}
static saArrayOrg
if( bFiltro == nil ) // Elimina Filtrado
::aArrayData := saArrayOrg
else // Aplica Filtro
for each aM in ::aArrayData
if( Eval( bFiltro, aM ) )
AAdd( aData, aM )
endif
next
saArrayOrg := ::aArrayData
::aArrayData := aData // xharbour
endif
::Refresh( TRUE )
RETURN Nil
Te irá mucho mejor, pero debo advertirte que explota particularidades de XHarbour que pueden variar en el futuro.
Pruebalo, copia este código a tu aplicación y lo utilizas con.-
::oArrayBrowse1:Filtra( { |m| m[1] >= "A" } )
para activar el filtro y .-
::oArrayBrowse1:Filtra()
para desactivarlo y volver a los datos originales.
Un saludo
Xavi
PD: Dios bendiga Open Source, porque otra cosa...
> Gracias a todos por vuestras respuestas.
> Tomaré nota de vuestros consejos.
> La verdad es que no he utilizado los MemDataSets todavía, y creo que
> será hora ya de meterme en alguno para aprender su uso.
>
> Un Saludo,
> Xevi.
>
Bueno, sniff, también podría haberte programado esto.-
CLASS TArrayBrowse FROM XArrayBrowse
METHOD Filtra( bFiltro )
ENDCLASS
// bFiltro : Code Block de Filtrado
// Dependiente de SubArray de ArrayData
// Ejemplo : { |m| m[1] >= "A" }
// bFiltro == nil : Elimina Filtrado
METHOD Filtra( bFiltro ) CLASS TArrayBrowse
Local aM, aData := {}
static saArrayOrg
if( bFiltro == nil ) // Elimina Filtrado
::aArrayData := saArrayOrg
else // Aplica Filtro
for each aM in ::aArrayData
if( Eval( bFiltro, aM ) )
AAdd( aData, aM )
endif
next
saArrayOrg := ::aArrayData
::aArrayData := aData // xharbour

endif
::Refresh( TRUE )
RETURN Nil
Te irá mucho mejor, pero debo advertirte que explota particularidades de XHarbour que pueden variar en el futuro.
Pruebalo, copia este código a tu aplicación y lo utilizas con.-
::oArrayBrowse1:Filtra( { |m| m[1] >= "A" } )
para activar el filtro y .-
::oArrayBrowse1:Filtra()
para desactivarlo y volver a los datos originales.
Un saludo
Xavi
PD: Dios bendiga Open Source, porque otra cosa...
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Filtro en ArrayBrowse
Xavi,
Ojo con esa estática que estás usando, ya que la compartiran todas las
instancias de TArrayBrowse.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"xAvi" <[email=x_@_com]x_@_com[/email]> escribió en el mensaje
news:470a499f$[email=2@ozsrv2.ozlan.local...]2@ozsrv2.ozlan.local...[/email]
> Xevi escribió:
>> Gracias a todos por vuestras respuestas.
>> Tomaré nota de vuestros consejos.
>> La verdad es que no he utilizado los MemDataSets todavía, y creo que será
>> hora ya de meterme en alguno para aprender su uso.
>>
>> Un Saludo,
>> Xevi.
>>
>
> Bueno, sniff, también podría haberte programado esto.-
>
> CLASS TArrayBrowse FROM XArrayBrowse
> METHOD Filtra( bFiltro )
> ENDCLASS
>
> // bFiltro : Code Block de Filtrado
> // Dependiente de SubArray de ArrayData
> // Ejemplo : { |m| m[1] >= "A" }
> // bFiltro == nil : Elimina Filtrado
> METHOD Filtra( bFiltro ) CLASS TArrayBrowse
> Local aM, aData := {}
> static saArrayOrg
>
> if( bFiltro == nil ) // Elimina Filtrado
> ::aArrayData := saArrayOrg
> else // Aplica Filtro
> for each aM in ::aArrayData
> if( Eval( bFiltro, aM ) )
> AAdd( aData, aM )
> endif
> next
> saArrayOrg := ::aArrayData
> ::aArrayData := aData // xharbour
> endif
> ::Refresh( TRUE )
> RETURN Nil
>
>
> Te irá mucho mejor, pero debo advertirte que explota particularidades de
> XHarbour que pueden variar en el futuro.
> Pruebalo, copia este código a tu aplicación y lo utilizas con.-
>
> ::oArrayBrowse1:Filtra( { |m| m[1] >= "A" } )
>
> para activar el filtro y .-
>
> ::oArrayBrowse1:Filtra()
>
> para desactivarlo y volver a los datos originales.
>
> Un saludo
> Xavi
> PD: Dios bendiga Open Source, porque otra cosa...
Ojo con esa estática que estás usando, ya que la compartiran todas las
instancias de TArrayBrowse.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"xAvi" <[email=x_@_com]x_@_com[/email]> escribió en el mensaje
news:470a499f$[email=2@ozsrv2.ozlan.local...]2@ozsrv2.ozlan.local...[/email]
> Xevi escribió:
>> Gracias a todos por vuestras respuestas.
>> Tomaré nota de vuestros consejos.
>> La verdad es que no he utilizado los MemDataSets todavía, y creo que será
>> hora ya de meterme en alguno para aprender su uso.
>>
>> Un Saludo,
>> Xevi.
>>
>
> Bueno, sniff, también podría haberte programado esto.-
>
> CLASS TArrayBrowse FROM XArrayBrowse
> METHOD Filtra( bFiltro )
> ENDCLASS
>
> // bFiltro : Code Block de Filtrado
> // Dependiente de SubArray de ArrayData
> // Ejemplo : { |m| m[1] >= "A" }
> // bFiltro == nil : Elimina Filtrado
> METHOD Filtra( bFiltro ) CLASS TArrayBrowse
> Local aM, aData := {}
> static saArrayOrg
>
> if( bFiltro == nil ) // Elimina Filtrado
> ::aArrayData := saArrayOrg
> else // Aplica Filtro
> for each aM in ::aArrayData
> if( Eval( bFiltro, aM ) )
> AAdd( aData, aM )
> endif
> next
> saArrayOrg := ::aArrayData
> ::aArrayData := aData // xharbour

> endif
> ::Refresh( TRUE )
> RETURN Nil
>
>
> Te irá mucho mejor, pero debo advertirte que explota particularidades de
> XHarbour que pueden variar en el futuro.
> Pruebalo, copia este código a tu aplicación y lo utilizas con.-
>
> ::oArrayBrowse1:Filtra( { |m| m[1] >= "A" } )
>
> para activar el filtro y .-
>
> ::oArrayBrowse1:Filtra()
>
> para desactivarlo y volver a los datos originales.
>
> Un saludo
> Xavi
> PD: Dios bendiga Open Source, porque otra cosa...
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Filtro en ArrayBrowse
Ignacio Ortiz de Zúñiga escribió:
> Xavi,
>
> Ojo con esa estática que estás usando, ya que la compartiran todas las
> instancias de TArrayBrowse.
>
> Un saludo
>
Pues también es verdad, gracias Ignacio.
Era para evitar declararsela como data: aArrayOrg.
Pues la cosa te queda así Xevi.-
CLASS TArrayBrowse FROM XArrayBrowse
DATA aOrgArray INIT {}
METHOD Filtra( bFiltro )
ENDCLASS
// bFiltro : Code Block de Filtrado
// Dependiente de SubArray de ArrayData
// Ejemplo : { |m| m[1] >= "A" }
// bFiltro == nil : Elimina Filtrado
METHOD Filtra( bFiltro ) CLASS TArrayBrowse
Local aM, aData := {}
if( bFiltro == nil ) // Elimina Filtrado
::aArrayData := ::aOrgArray
else // Aplica Filtro
for each aM in ::aArrayData
if( Eval( bFiltro, aM ) )
AAdd( aData, aM )
endif
next
::aOrgArray := ::aArrayData
::aArrayData := aData // xharbour
endif
::Refresh( TRUE )
RETURN Nil
Un saludo
Xavi
> Xavi,
>
> Ojo con esa estática que estás usando, ya que la compartiran todas las
> instancias de TArrayBrowse.
>
> Un saludo
>
Pues también es verdad, gracias Ignacio.
Era para evitar declararsela como data: aArrayOrg.

Pues la cosa te queda así Xevi.-
CLASS TArrayBrowse FROM XArrayBrowse
DATA aOrgArray INIT {}
METHOD Filtra( bFiltro )
ENDCLASS
// bFiltro : Code Block de Filtrado
// Dependiente de SubArray de ArrayData
// Ejemplo : { |m| m[1] >= "A" }
// bFiltro == nil : Elimina Filtrado
METHOD Filtra( bFiltro ) CLASS TArrayBrowse
Local aM, aData := {}
if( bFiltro == nil ) // Elimina Filtrado
::aArrayData := ::aOrgArray
else // Aplica Filtro
for each aM in ::aArrayData
if( Eval( bFiltro, aM ) )
AAdd( aData, aM )
endif
next
::aOrgArray := ::aArrayData
::aArrayData := aData // xharbour

endif
::Refresh( TRUE )
RETURN Nil
Un saludo
Xavi