Page 1 of 1

Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Sat Apr 22, 2023 9:49 pm
by leandro
Hola buenas tardes para todos

En este momento requerimos agregar o quitar columnas del xbrowse en tiempo de ejecución. Ya que estamos intentando generar un reporte dinámico.

O es necesario volver a crear todo el objeto? si este fuera el caso como se hace? De antemano gracias.

Image
Después de cambiar la info
Image

El código que muestra lo que intentamos hacer
Code: Select all  Expand view


#include "fivewin.ch"

function Main()

   local oWnd, oBar, oBrw, oFont
   local cNcol, j
   local atales
   local aCols1 := {"nombre","apellido","id","dinamica1","dinamica2","dinamica3","dinamica4"}
   local aColTt := {"El nombre","El apellido","el id","la columna 1","la columna 2","la columna 3","la columna 4"}
   local aColAn := {100,100,40,80,80,80,80}
   local cbCambioInfo := <||
        aTales := ReadHashArray2() //LLenamos el array con la nueva información
        oBrw:aArrayData := aTales   
        oBrw:refresh()
   >

   aTales := ReadHashArray() //LLenamos el array con los datos iniciales

   Define Font oFont Name "Calibri" Size 0,-14 Bold
   DEFINE WINDOW oWnd TITLE FWVERSION + " : Columnas Dinamicas"  
   oWnd:SetFont( oFont )

   DEFINE BUTTONBAR oBar OF oWnd SIZE 50,20 2007
   DEFINE BUTTON OF oBar PROMPT "Cambio"   CENTER ACTION EVAL(cbCambioInfo)

   SET MESSAGE OF oWnd TO "" 2007
   
    @ oBar:nHeight,0 XBROWSE oBrw ;
    SIZE 0 ,0 OF oWnd PIXEL ;
    LINES STYLE FLAT NOBORDER ;
    DATASOURCE aTales AUTOCOLS
   
    ReArrangeCols( oBrw, aCols1 )

    WITH OBJECT oBrw
        :lRecordSelector        := .T.
        :lHScroll           := .T.
        :lVScroll           := .T.
        :l2007              := .T.
        :lFitGridHeight         := .T.
        :nHeaderHeight          := 30
        :nRowHeight         := 21
        :nMarqueeStyle          := MARQSTYLE_HIGHLROW
        :lColDividerComplete    := .t.
        :lFullGrid          := .T.
        :nStretchCol            := STRETCHCOL_LAST
    END

    WITH OBJECT oBrw

        //Colocamos los titulos a las columnas
        FOR j:=1 TO len(aCols1)
            :aCols[j]:cHeader  := aColTt[j]
            :aCols[j]:nWidth = aColAn[j]   
        NEXT

    END
    oBrw:CreateFromCode()
    oWnd:oClient := oBrw

   ACTIVATE WINDOW oWnd CENTERED

return nil
 
 
static function ReadHashArray()

   local hInfo, aTales := {}

   hInfo := {=>}
   hInfo["nombre"] := "LEANDRO"
   hInfo["apellido"] := "AREVALO"
   hInfo["id"] := 1
   hInfo["dinamica1"] := 15000
   hInfo["dinamica2"] := 25000
   hInfo["dinamica3"] := 35000
   hInfo["dinamica4"] := 45000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "JUDITH"
   hInfo["apellido"] := "RIVAS"
   hInfo["id"] := 2
   hInfo["dinamica1"] := 15000
   hInfo["dinamica2"] := 25000
   hInfo["dinamica3"] := 35000
   hInfo["dinamica4"] := 45000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "ROBERTO"
   hInfo["apellido"] := "TOTO"
   hInfo["id"] := 3
   hInfo["dinamica1"] := 15000
   hInfo["dinamica2"] := 25000
   hInfo["dinamica3"] := 35000
   hInfo["dinamica4"] := 45000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "FEDERICO"
   hInfo["apellido"] := "EXPLICO"
   hInfo["id"] := 4
   hInfo["dinamica1"] := 15000
   hInfo["dinamica2"] := 25000
   hInfo["dinamica3"] := 35000
   hInfo["dinamica4"] := 45000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "ENTIENDES"
   hInfo["apellido"] := "MEDEZ"
   hInfo["id"] := 5
   hInfo["dinamica1"] := 15000
   hInfo["dinamica2"] := 25000
   hInfo["dinamica3"] := 35000
   hInfo["dinamica4"] := 45000
   AADD(atales,hInfo)
   hInfo := {=>}

#ifdef __XHARBOUR__
   AEval( aTales, { |h|    HSetCaseMatch( h, .f. ) } )
#else
   AEval( aTales, { |h| HB_HSetCaseMatch( h, .f. ) } )
#endif

return aTales

static function ReadHashArray2()

   local hInfo, aTales := {}

   hInfo := {=>}
   hInfo["nombre"] := "LEANDRO"
   hInfo["apellido"] := "AREVALO"
   hInfo["id"] := 1
   hInfo["dinamica2"] := 25000
   hInfo["dinamica5"] := 45000
   hInfo["dinamica6"] := 55000
   hInfo["dinamica7"] := 75000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "JUDITH"
   hInfo["apellido"] := "RIVAS"
   hInfo["id"] := 2
   hInfo["dinamica2"] := 25000
   hInfo["dinamica5"] := 45000
   hInfo["dinamica6"] := 55000
   hInfo["dinamica7"] := 75000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "ROBERTO"
   hInfo["apellido"] := "TOTO"
   hInfo["id"] := 3
   hInfo["dinamica2"] := 25000
   hInfo["dinamica5"] := 45000
   hInfo["dinamica6"] := 55000
   hInfo["dinamica7"] := 75000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "FEDERICO"
   hInfo["apellido"] := "EXPLICO"
   hInfo["id"] := 4
   hInfo["dinamica2"] := 25000
   hInfo["dinamica5"] := 45000
   hInfo["dinamica6"] := 55000
   hInfo["dinamica7"] := 75000
   AADD(atales,hInfo)
   hInfo := {=>}

   hInfo["nombre"] := "ENTIENDES"
   hInfo["apellido"] := "MEDEZ"
   hInfo["id"] := 5
   hInfo["dinamica2"] := 25000
   hInfo["dinamica5"] := 45000
   hInfo["dinamica6"] := 55000
   hInfo["dinamica7"] := 75000
   AADD(atales,hInfo)
   hInfo := {=>}

#ifdef __XHARBOUR__
   AEval( aTales, { |h|    HSetCaseMatch( h, .f. ) } )
#else
   AEval( aTales, { |h| HB_HSetCaseMatch( h, .f. ) } )
#endif

return aTales
 
 
function ReArrangeCols( oBrw, aCols )
   AEval( oBrw:aCols, { |o| o:lHide := .f. } )
   oBrw:ReArrangeCols( aCols )
   AEval( oBrw:aCols, { |o| o:lHide := .t. }, Len( aCols ) + 1 )
   oBrw:Refresh()
return nil
 
 

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Sat Apr 22, 2023 10:08 pm
by JoseAlvarez
Hola leandro,

has intentado con oBrw:aCols[nNumeroColumna]:Hide()

Quizas te funcione.

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Sat Apr 22, 2023 11:30 pm
by leandro
Jose gracias por responder

Pero lo que necesito NO es ocultarlas y mostrarlas (hide/show). El array hash que recibimos, viene con algunas de las columnas diferentes. Son dinámicas.

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Mon Apr 24, 2023 2:46 am
by cnavarro
Leandro,
En la clase TXBROWSE, existe el METHOD DelCol( nPos )

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Thu Apr 27, 2023 7:50 pm
by leandro
Amigo gracias por responder...

Si ese método lo había encontrado en la clase de xbrowse. El problema que tambien tenemos es como saber si una columna es definida o no en el xbrowse, puede ser por su titulo.

Si tuvieras un ejemplo te lo agradecería.

De antemano gracias

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Fri Apr 28, 2023 3:34 am
by cnavarro
leandro wrote:Amigo gracias por responder...

Si ese método lo había encontrado en la clase de xbrowse. El problema que tambien tenemos es como saber si una columna es definida o no en el xbrowse, puede ser por su titulo.

Si tuvieras un ejemplo te lo agradecería.

De antemano gracias

Code: Select all  Expand view

nPos := Ascan( oBrw:aCols, { | o | Lower( o:cHeader ) == Lower( "mi titulo que busco" ) } )
if !Empty( nPos )
   ? "Si existe"
endif
 

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Fri May 12, 2023 9:57 am
by leandro
Excelente Amigo Cris muchas gracias, era lo que hacia falta :D

Re: Agregar/Quitar columna xbrowse tiempo ejecución

PostPosted: Fri May 12, 2023 12:12 pm
by nageswaragunupudi
If you want to know if a column with a particular header exists in xbrowse
Code: Select all  Expand view
oCol := oBrw:oCol( cHeader )
if Empty( oCol )
   // does not exist
else
  // oCol is the column with cHeader
  // do whatever you want with oCol
endif