Agregar/Quitar columna xbrowse tiempo ejecución

Post Reply
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Agregar/Quitar columna xbrowse tiempo ejecución

Post 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


#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 
 
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
JoseAlvarez
Posts: 810
Joined: Sun Nov 09, 2014 5:01 pm

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post by JoseAlvarez »

Hola leandro,

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

Quizas te funcione.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post 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.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post by cnavarro »

Leandro,
En la clase TXBROWSE, existe el METHOD DelCol( nPos )
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
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post 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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post 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

nPos := Ascan( oBrw:aCols, { | o | Lower( o:cHeader ) == Lower( "mi titulo que busco" ) } )
if !Empty( nPos )
   ? "Si existe"
endif
 
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
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post by leandro »

Excelente Amigo Cris muchas gracias, era lo que hacia falta :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
nageswaragunupudi
Posts: 10721
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 8 times
Contact:

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Post by nageswaragunupudi »

If you want to know if a column with a particular header exists in xbrowse

Code: Select all | Expand

oCol := oBrw:oCol( cHeader )
if Empty( oCol )
   // does not exist
else
  // oCol is the column with cHeader
  // do whatever you want with oCol
endif
Regards

G. N. Rao.
Hyderabad, India
Post Reply