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.
Después de cambiar la info
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