Hola amigos
Se puede crear un xbrowse con un array y esta array que este vacio ?
La idea ir llenado el array desde un button y resfrescando el browse, pero siempre me da el error array acces.
un saludo
Hola amigos
Se puede crear un xbrowse con un array y esta array que este vacio ?
La idea ir llenado el array desde un button y resfrescando el browse, pero siempre me da el error array acces.
un saludo
function Main()
local aDatos
aDatos := { { "", "", "" } }
REDEFINE XBROWSE oBrw ARRAY aDatos ID ID_BRW OF oDlg
......
carga datos en array
......
oBrw:Refresh()
return nilHola
De esa forma me muestra una fila en el xbrowse, con los datos vacios, lo que quiero es que no me muestra ninguna fila y despues desde un button le voy añadiendo datos al xbrowse.
un saludo
Gabriel
Yo tambien tengo el browse que muestra la fila vacia. La verdad es que todavia no he dedicado tiempo a resolver ese tema.
Si lo averiguo, te lo haré saber.
Un saludo.
Si lo logran Hacer, Me Avisan!!! ![]()
oBrw:aCols[1]:cHeader := "primera"
oCol1 := oBrw:oCol( "primera" )
oCol1:Hide()#include "FiveWin.ch"
#include "XBrowse.ch"
function Main()
local oWnd,oBrw,aData
aData := { { "Linea", Date(), 0 } }
DEFINE WINDOW oWnd TITLE "Click botón derecho a la derecha de las columnas"
@ 0,0 XBROWSE oBrw OF oWnd ARRAY aData AUTOCOLS
oBrw:CreateFromCode()
oWnd:oClient := oBrw
oBrw:bRClicked := { || AddRow( oBrw ) }
ACTIVATE WINDOW oWnd ;
ON INIT ( ASize( aData, 0 ), oBrw:GoTop(), oBrw:Refresh() )
return nil
function AddRow( oBrw )
local n := oBrw:nLen + 1
AAdd( oBrw:aArrayData, { Str( n ), Date() + n, n } )
oBrw:GoBottom()
oBrw:Refresh()
return nilEsto funciona si quiero limpiar el arreglo, pero ¿si no se como viene el arreglo? puede venir vacía como puede traer elementos
Quique,
Habría que comprobar que valores lleva aData.
Podríamos hacer que la Clase TXBrowse lo compruebe automaticamente, pero lo lógico sería que el programador lo compruebe según sus necesidades.
Quizás no he entendido bien lo que planteas ?
aData := {}
DO WHILE !eof
if date == date()
aAdd( aData, { linea, fecha, posicion } )
endIf
ENDDO
@ 0,0 XBROWSE oBrw OF oWnd ARRAY aData COLS 1,2,3@ 0,0 XBROWSE oBrw OF oWnd ARRAY aData HEAD "Linea", "Fecha", "Posición" AUTOCOLS oBrw:=TxBrowse():New(oDlg)
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // Con cursor de todo el renglón
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:lColDividerComplete := (.F.) // (.T.) Matiene siempre llena la pantalla
oBrw:nHeaderHeight := 25 // Altura de los encabezados
oBrw:nRowHeight := 22 // Altura del renglón
oBrw:nHeaderLines := 1 // Número de líneas de encabezados
oBrw:nDataLines := 1 // Número de líneas de detalle
oBrw:nFooterHeight := 20 // Altura del footer
oBrw:nFooterLines := 1 // Número de líneas en el footer
oBrw:lFooter := (.T.) // Sí queremos línea de footer
oBrw:lHScroll := (.F.) // Quitamos el scroll horizontal
aCol[ 1] := oBrw:AddCol()
aCol[ 1]:bStrData := { || IF(oRsRes:BOF() .AND. oRsRes:EOF(),SPACE(1),oRsRes:Fields("RES_NOM"):Value)}
aCol[ 1]:cHeader := "Nombre del residente"
aCol[ 1]:nHeadStrAlign := AL_LEFT
aCol[ 1]:nDataStrAlign := AL_LEFT
aCol[ 1]:nWidth := 350
aCol[ 2] := oBrw:AddCol()
aCol[ 2]:bStrData := { || IF(oRsRes:BOF() .AND. oRsRes:EOF(),SPACE(1),oRsRes:Fields("RES_INI"):Value)}
aCol[ 2]:cHeader := "Iniciales"
aCol[ 2]:nHeadStrAlign := AL_LEFT
aCol[ 2]:nDataStrAlign := AL_LEFT
aCol[ 2]:nWidth := 45 oBrw:bGoTop := { || IF( ! oRsRes:BOF() .AND. ! oRsRes:EOF(), oRsRes:MoveFirst(), ) }
oBrw:bGoBottom := { || IF( ! oRsRes:BOF() .AND. ! oRsRes:EOF(), oRsRes:MoveLast(), ) }
oBrw:bBof := { || oRsRes:BOF() }
oBrw:bEof := { || oRsRes:EOF() }
oBrw:bBookMark := { | uBm | IF( oRsRes:BOF() .AND. oRsRes:EOF(), 0, IF( uBm == NIL, oRsRes:BookMark, oRsRes:BookMark := uBm ) ) }
oBrw:bKeyNo := { | n | IF( oRsRes:BOF() .AND. oRsRes:EOF(), 0, IF( n == NIL, oRsRes:AbsolutePosition, oRsRes:AbsolutePosition := n ) ) }
oBrw:bKeyCount := {|| oRsRes:RecordCount() }
oBrw:SetAdo(oRsRes)
Pues el experto en el tema sería Antonio
porque el problema es manejarlo de manera general para que lo detecte el xbrowse, yo creo que lo mas fácil sería detectar si el array está vacío y no mostrar la línea, supongo que de alguna manera eso hace porque en el ejemplo que puso antonio o en el que pusiste tu así se muestra.
#include "FiveWin.ch"
#include "XBrowse.ch"
function Main()
local oWnd, oBrw, aData := {}
DEFINE WINDOW oWnd
@ 0, 0 XBROWSE oBrw OF oWnd ARRAY aData HEAD "One", "Two", "Three" AUTOCOLS
oBrw:CreateFromCode()
oWnd:oClient = oBrw
ACTIVATE WINDOW oWnd
return nilNo hay que modificar los datos, simplemente mostrar un browse vacío, ese no es error, si lo que quiero mostrar es el listado de las facturas y ese día no se ha facturado, o si quiero mostrar la lista de personas que trabajaron horas extra el día anterior y nadie se quedó, no son errores, simplemente, es un browse vacío
Lo hago asi con twbrowse, el concepto seria el mismo para otro
browser
Salu2
.....
...
..
.
aDetalle := {}
AaDd(aDetalle, {"", "", "", 0, 0, 0, "", ""})
...
....
DEFINE DIALOG oDlgB ;
....
...
REDEFINE LISTBOX oLbxA ;
FIELDS aDetalle[oLbxA:nAt, 2], ;
aDetalle[oLbxA:nAt, 3], ;
STR(aDetalle[oLbxA:nAt, 4],12,3), ;
STR(aDetalle[oLbxA:nAt, 5],12,3), ;
STR(aDetalle[oLbxA:nAt, 6],12,3) ;
HEADERS "Producto", ;
"Unidad", ;
"Cantidad", ;
"Precio", ;
"Sub Total" ; //
....
...
..
.
REDEFINE BUTON oRell
ACTION (aDetalle := LlenaDetas(cCodigo, aDetalle), ;
oLbxA:SetArray(aDetalle), ;
oLbxA:Refresh())
...
..
Function LlenaDetas(cCodigo,aDetalle)
If !DbSeek(cCodigo)
Return(adetalle)
EndIf
aDetalle := {}
.... aqui relleno el array segun los datos
Return(aDetalle) // retorna el arreglo con datos...