Problema con xBrowse y ARRAY

Problema con xBrowse y ARRAY

Postby jll-fwh » Fri Feb 12, 2010 2:09 am

Hola a todos:

A ver si alguien me dice como solucionar este problemilla:

Tengo definido un xBrowse mediante ARRAY, que en funcion del valor de la columna 8 del array , debe de pintar un BMP en la 1 columna y pintar la fila de negro o rojo, hasta aqui bien.

El problema viene cuando cambio el valor, ya que no refresca bien el Browse, para que visualize la fila en rojo o negro y que se pueda ver el BMP, tengo que hacer click con el raton sobre los registros o subir y bajar con las teclas del cursor.

NOTA: Cargo los datos en ON INIT.

La declaracion de las columnas en un Browse mediante ARRAY es como la declaro?
La variable ::nRowSel, es la posicion relativa ?

Para refrescar el Browse, uso como siempre, Refresh(), que detalle hay que hacer con xBrowse para que repinte todo bien? o que estoy haciendo mal para que no funcione bien?

Yo siempre he usado ListBox y el Browse de Hernan y funciona perfectamente, el xBrowse es una maravilla pero aun tengo alguna cosilla que no se como funciona todavia, quiero usar xBrowse por su potencia.

Aqui dejo la declaracion del Browse mediante ARRAY y la funcion que carga los datos en el ARRAY.

REDEFINE XBROWSE oGrid ARRAY aDetNid ID 200 OF oDlg

oGrid:l2007 := .F.
oGrid:nMarqueeStyle := MARQSTYLE_HIGHLROW
oGrid:nColDividerStyle := LINESTYLE_BLACK
oGrid:lColDividerComplete := .T.
oGrid:bClrSel := {|| { CLR_BLACK, nRGB( 192,192,192 )}}
oGrid:bClrSelFocus := {|| { CLR_WHITE, nRGB( 128,128,255 )}}
oGrid:nHeaderLines := 2 // Numero de lineas en la cabeceras
oGrid:nDataLines := 1 // Numero de lineas en los detalles
oGrid:lFooter := .F. // Inserta pies en cada columna
oGrid:nDataLines := 1 // Lineas de separacion entre lineas del detalles
oGrid:lHScroll := .F. // Barra Horizontal
oGrid:lVScroll := .F. // Barra Ventical

oGrid:SetArray( aDetNid )


oGrid:aCols[1]:AddResource("ON")
oGrid:aCols[1]:AddResource("OFF")
oGrid:aCols[1]:cHeader := ""+CRLF+"Est"
oGrid:aCols[1]:nWidth := 25
oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aArrayData[ oGrid:nRowSel ][1] == 1,2,1 )}

oGrid:aCols[2]:cHeader := ""+CRLF+"Huevo"
oGrid:aCols[2]:nDataStrAlign := 2 // Alineacion: 1.- derecha 2.- centrado 3.- izquierda
oGrid:aCols[2]:nHeadStrAlign := 2 // Alineacion: 1.- derecha 2.- centrado 3.- izquierda
oGrid:aCols[2]:nWidth := 60
oGrid:aCols[2]:bLDClickData := bLDClickData
oGrid:aCols[2]:bRClickData := bRClickData
oGrid:aCols[2]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[3]:cHeader := "Fecha"+CRLF+"Puesta"
oGrid:aCols[3]:nDataStrAlign := 2
oGrid:aCols[3]:nHeadStrAlign := 2
oGrid:aCols[3]:nWidth := 80
oGrid:aCols[3]:bLDClickData := bLDClickData
oGrid:aCols[3]:bRClickData := bRClickData
oGrid:aCols[3]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[4]:cHeader := "Fecha Prevista"+CRLF+"Nacimiemto"
oGrid:aCols[4]:nDataStrAlign := 2
oGrid:aCols[4]:nHeadStrAlign := 2
oGrid:aCols[4]:nWidth := 90
oGrid:aCols[4]:bLDClickData := bLDClickData
oGrid:aCols[4]:bRClickData := bRClickData
oGrid:aCols[4]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[5]:cHeader := "Fecha"+CRLF+"Control"
oGrid:aCols[5]:nDataStrAlign := 2
oGrid:aCols[5]:nHeadStrAlign := 2
oGrid:aCols[5]:nWidth := 80
oGrid:aCols[5]:bLDClickData := bLDClickData
oGrid:aCols[5]:bRClickData := bRClickData
oGrid:aCols[5]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[6]:cHeader := "Fecha"+CRLF+"Fecundación"
oGrid:aCols[6]:nDataStrAlign := 2
oGrid:aCols[6]:nHeadStrAlign := 2
oGrid:aCols[6]:nWidth := 80
oGrid:aCols[6]:bLDClickData := bLDClickData
oGrid:aCols[6]:bRClickData := bRClickData
oGrid:aCols[6]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[7]:cHeader := "Fecha"+CRLF+"Nacimiento"
oGrid:aCols[7]:nDataStrAlign := 2
oGrid:aCols[7]:nHeadStrAlign := 2
oGrid:aCols[7]:nWidth := 80
oGrid:aCols[7]:bLDClickData := bLDClickData
oGrid:aCols[7]:bRClickData := bRClickData
oGrid:aCols[7]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

oGrid:aCols[8]:cHeader := ""+CRLF+"Estado"
oGrid:aCols[8]:nDataStrAlign := 3
oGrid:aCols[8]:nHeadStrAlign := 2
oGrid:aCols[8]:nWidth := 250
oGrid:aCols[8]:bLDClickData := bLDClickData
oGrid:aCols[8]:bRClickData := bRClickData
oGrid:aCols[8]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }



Y la funcion que carga los datos:

/*------------------------------------------------------------------------------*/
STATIC Function PasaTABLA()
/*------------------------------------------------------------------------------*/

*/ Pasamos los datos de la BD a la tabla aDetNid /*

If ! MiDosBuscar( "NidPar", 1, Nidadas->CodNid )
Return NIL
End

ASize( aDetNid, 0 )

WHILE NidPar->CodNid == Nidadas->CodNid .AND. ! NidPar->( Eof() )

AAdd( aDetNid, { IIF( NidPar->Estado == aEstadoH[8], 2, 1 ),; // Control de Huevo Eclosionado
NidPar->NHuevo ,; // Nº Huevo
NidPar->FPuest ,; // Fecha puesta
NidPar->FPNaci ,; // Fecha Prev.Nacimiento
NidPar->FContr ,; // Fecha Control
NidPar->FFecun ,; // Fecha fecundacion
NidPar->FNacim ,; // Fecha nacimiento
NidPar->Estado }) // Estado

NidPar->( DbSkip() )
SysRefresh()

END

oGrid:Refresh()
oGrid:SetFocus()

Return NIL


Un saludo
JLL

Libreria: FWH/FWHX 8.12 28/December/2008
Harbour: Harbour 1.0.1 Rev 9361 1999-2008
Compilador: Borland C++ 5.5.1 versión 32bits
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: Problema con xBrowse y ARRAY

Postby Daniel Garcia-Gil » Fri Feb 12, 2010 2:40 am

Saludos...

jll-fwh wrote:La variable ::nRowSel, es la posicion relativa ?

es la posicion de la fila seleccionada tomando en cuenta la cantidad de filas visibles, es decir, si tienes 10 lineas visibles nRowSel nunca sera mayor que 10

prueba usar ::aRow[ nCol ]

oGrid:aRow[ 3 ] te devolvera el valor de la fila seleccionada en la columna 3, independientemente de la cantidad de filas visibles

presumo que pudes tener un error aqui

oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aArrayData[ oGrid:nRowSel ][1] == 1,2,1 )} ya que hablas que depende del valode de la columna 8 y estas usando el valode la columna 1 puedes cambairlo asi:
Code: Select all  Expand view  RUN
oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aRow[ 8 ] == 1,2,1 )} // es mas sencillo y corto
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Problema con xBrowse y ARRAY

Postby jll-fwh » Fri Feb 12, 2010 4:29 am

Hola Daniel:

Efectivamente de este modo funciona a la perfeccion:

oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aRow[ 8 ] == 1,2,1 )}

Muchas gracias por tu ayuda. Gracias a gente como tu, otros vemos el sol entre los nubarrones.

Gracias por tu tiempo y ayuda.
Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: Problema con xBrowse y ARRAY

Postby anserkk » Fri Feb 12, 2010 4:45 am

Otra opción

Code: Select all  Expand view  RUN
oGrid:aCols[1]:bBmpData   := { || iif( oGrid:aArrayData[oGrid:nArrayAt][8] == 1, 2, 1) }


Saludos
Anser
User avatar
anserkk
 
Posts: 1333
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 60 guests