En esta ocasión estoy intentando mostrar en un xbrowse columnas de manera dinámica depende de la opción seleccionada. El tema es que al momento de mostrar el contenido dinámico del array se "duplican" los datos. Para ser un poco mas claro monte este ejemplo:
Los valores que se deberian mostrar en la columna dinámica1 serian 15000, no 35000 como ahí aparecen.
- Code: Select all Expand view
#include "fivewin.ch"
#include "xbrowse.ch"
function Main()
local oWnd, oBrw, oCol, oFont
local cNcol, i
local atales := {}
local hInfo := {=>}
local aNnCm := {"dinamica1","dinamica3"}
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 := {=>}
Define Font oFont Name "Calibri" Size 0,-12 Bold
DEFINE WINDOW oWnd TITLE "Columnas Dinamicas"
SET MESSAGE OF oWnd TO "" 2007
@ 0,0 XBROWSE oBrw OF oWnd
oCol = oBrw:AddCol()
oCol:bStrData := {|| if(Len( atales ) > 0 , transform(atales[oBrw:nArrayAt]["id"],"99") ,"" ) }
oCol:cHeader = "Id"
oCol:nWidth = 20
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT
oCol:oHeaderFont = oFont
oCol = oBrw:AddCol()
oCol:bStrData := {|| if(Len( atales ) > 0 , atales[oBrw:nArrayAt]["nombre"] ,"" ) }
oCol:cHeader = "Nombre"
oCol:nWidth = 100
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT
oCol:oHeaderFont = oFont
oCol = oBrw:AddCol()
oCol:bStrData := {|| if(Len( atales ) > 0 , atales[oBrw:nArrayAt]["apellido"] ,"" ) }
oCol:cHeader = "Apellido"
oCol:nWidth = 100
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT
oCol:oHeaderFont = oFont
FOR i:=1 TO len(aNnCm)
cNcol := aNnCm[i] //RECUPERAMOS EL NOMBRE DEL CAMPO EN HASH
oCol = oBrw:AddCol()
oCol:bStrData := {|| if(Len( atales ) > 0 , atales[oBrw:nArrayAt][cNcol] ,"" ) }
oCol:cHeader = cNcol
oCol:nWidth = 100
oCol:nHeadStrAlign = AL_RIGHT
oCol:nDataStrAlign = AL_RIGHT
oCol:oHeaderFont = oFont
NEXT
oBrw:SetArray( atales )
oBrw:CreateFromCode()
oWnd:oClient := oBrw
ACTIVATE WINDOW oWnd
return nil