Agregar/Quitar columna xbrowse tiempo ejecución

Agregar/Quitar columna xbrowse tiempo ejecución

Postby leandro » Sat Apr 22, 2023 9:49 pm

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  RUN


#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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby JoseAlvarez » Sat Apr 22, 2023 10:08 pm

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
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby leandro » Sat Apr 22, 2023 11:30 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby cnavarro » Mon Apr 24, 2023 2:46 am

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

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby leandro » Thu Apr 27, 2023 7:50 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby cnavarro » Fri Apr 28, 2023 3:34 am

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  RUN

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

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby leandro » Fri May 12, 2023 9:57 am

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Agregar/Quitar columna xbrowse tiempo ejecución

Postby nageswaragunupudi » Fri May 12, 2023 12:12 pm

If you want to know if a column with a particular header exists in xbrowse
Code: Select all  Expand view  RUN
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
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 20 guests