Cambiar imagen de columna en un grid
Posted: Tue Mar 02, 2021 7:40 pm
by jparada
Hola,
La pregunta es cómo cambiar una imagen que asigné a una columna en un grid, por ejemplo:

- img1.png (47.17 KiB) Viewed 1351 times
una vez que cargué los datos al grid le asigno esa imagen y al dar clic al botón conciliar se va a realizar el proceso, aquí la función, con su ayuda así quedó:
Code: Select all
PROCEDURE Conciliar()
LOCAL i
LOCAL j
LOCAL cArchivo := HB_DirBase() + 'conciliacion.txt'
LOCAL lNuevo
FOR i=1 TO Win1.Grid1.ItemCount // BANCO
cDescBanco := Win1.Grid1.CellEx(i, 3)
nCargoBanco := Val(Win1.Grid1.CellEx(i, 4))
nAbonoBanco := Val(Win1.Grid1.CellEx(i, 5))
FOR j := 1 TO Win1.Grid2.ItemCount // AUXILIAR
cDescAux := Win1.Grid2.CellEx(i, 4)
nCargoAux := Val(Win1.Grid2.CellEx(i, 5))
nAbonoAux := Val(Win1.Grid2.CellEx(i, 6))
IF nCargoAux == nCargoBanco .AND. nAbonoAux == nAbonoBanco // ENCONTRÓ ALGUNA COINCIDENCIA
crearArchivo( cArchivo, 'fila ' + hb_NToS(j) + ' del Auxiliar --> ' + cDescAux + ;
' Cargo --> ' + hb_NToS(nCargoAux) + ;
' Abono --> ' + hb_NToS(nAbonoAux) + hb_eol(), @lNuevo )
crearArchivo( cArchivo, 'fila ' + hb_NToS(i) + ' del Banco --> ' + cDescBanco + ;
' Cargo --> ' + hb_NToS(nCargoBanco) + ;
' Abono --> ' + hb_NToS(nAbonoBanco) + hb_eol(), @lNuevo )
ENDIF
NEXT j
NEXT i
MsgBox('Terminado...')
RETURN
Entonces al haber una coincidencia cómo cambio el icono en ambos grids de acuerdo a lo que coincide (no sé si me expliqué bien) con otra imagen de ok por ejemplo.
Esa es la idea que tengo, pero luego pienso que cómo voy a ligar la información para presentar al usuario, es decir simples imágenes no le dicen nada al usuario a menos que tenga alguna columna adicional con algún identificador o que al seleccionar el grid bancos en automático se seleccione la fila del grid auxiliar que tiene coincidencia.
Alguna idea compañeros de cómo implementar esta solución.
Saludos,
Javier
Re: Cambiar imagen de columna en un grid
Posted: Tue Mar 02, 2021 8:26 pm
by martingz
Javier tengo algo parecido se basa en una columna que tengo al inicio del grid, al principio esta tiene valor de 0, despues al dar dobleclick y editar el contenido cambio el valor de las columna por 1
en el contro grid en imagen pongo esto {"EDIT_NO","EDIT_OK"}
si es 0 toma la primera imagen y si es uno la segunda
No se si me explique, adjunto imagen de como se ve
quedo pendiente para cualquier duda

- efewgfqee.jpg (97.19 KiB) Viewed 1341 times
Re: Cambiar imagen de columna en un grid
Posted: Tue Mar 02, 2021 8:33 pm
by jparada
Hola Martín,
Sí es parecido a lo que requiero pero no sé cómo hacerlo dinámicamente, por ejemplo aquí:
FOR j := 1 TO Win1.Grid2.ItemCount // AUXILIAR
cDescAux := Win1.Grid2.CellEx(i, 4)
nCargoAux := Val(Win1.Grid2.CellEx(i, 5))
nAbonoAux := Val(Win1.Grid2.CellEx(i, 6))
IF nCargoAux == nCargoBanco .AND. nAbonoAux == nAbonoBanco // ENCONTRÓ ALGUNA COINCIDENCIA
--> Aquí cómo actualizo dinámicamente el icono en ambos grids
Saludos,
Javier
Re: Cambiar imagen de columna en un grid
Posted: Wed Mar 03, 2021 1:51 am
by martingz
Ok, Javier cuando diseño el grid
DEFINE GRID Grid_1
ROW 100
COL 10
WIDTH 810
HEIGHT 400
ITEMS arordencomp
VALUE Nil
WIDTHS {30,90,90,90,80,400,0,0,0,0,0,0}
HEADERS {'Autorizada','# Orden','Requisicion','Factura','Fecha Fact.','Proveedor','cveprov','fechac','iva','requisi','Prop','Cancelada'}
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .T.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONDBLCLICK Nil
ONHEADCLICK {Nil,{|| llenagridcompra(1) },{|| llenagridcompra(3) },{|| llenagridcompra(4) },{|| llenagridcompra(5) },{|| llenagridcompra(6) },Nil,Nil,Nil,Nil,Nil}
ONQUERYDATA Nil
MULTISELECT .F.
ALLOWEDIT .F.
VIRTUAL .F.
DYNAMICBACKCOLOR {bColor,bColor,bColor,bColor,bColor,bColor,bColor,bColor,bColor,bColor,bColor,bColor}
DYNAMICFORECOLOR {aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan,aColCan}
COLUMNWHEN Nil
COLUMNVALID Nil
COLUMNCONTROLS Nil
SHOWHEADERS .T.
CELLNAVIGATION .F.
NOLINES .F.
HELPID Nil
IMAGE {"EDIT_NO","EDIT_OK"} *** aqui defino en mi primer columna me mustre la imagen dependiendo de su valor 0/1
JUSTIFY { BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT ,BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT,BROWSE_JTFY_RIGHT}
ITEMCOUNT Nil
BACKCOLOR NIL
FONTCOLOR NIL
HEADERIMAGES {'NULO' ,'ORDER' , 'ORDER' ,'ORDER' ,'ORDER' , 'ORDER','NULO','NULO','NULO','NULO','NULO','NULO'}
ROWSOURCE Nil
COLUMNFIELDS Nil
ALLOWAPPEND .F.
ALLOWDELETE .F.
BUFFERED .F.
DYNAMICDISPLAY Nil
ONSAVE Nil
LOCKCOLUMNS 0
END GRID
cuando cambio el valor de la primera columna automaticamente cambia la imagen es decir
IF nCargoAux == nCargoBanco .AND. nAbonoAux == nAbonoBanco // ENCONTRÓ ALGUNA COINCIDENCIA
nlineas:=win1.Grid_1.value
aValues:=win1.Grid_1.Item(nlineas)
win1.Grid_1.Item(nlineas):={1** aqui cambias el valor a 0/1,aValues[2],aValues[3],aValues[4],aValues[5],aValues[6],aValues[7],aValues[8],aValues[9],aValues[10],aValues[11],aValues[12]}
endif
Re: Cambiar imagen de columna en un grid
Posted: Wed Mar 03, 2021 10:38 pm
by jparada
Hola Martin,
Fíjate que eso no me funciona, no sé si estoy haciendo algo mal...
Pero antes de llegar a ese paso, recién me doy cuenta que tengo otro problema a ver si me pueden ayudar a ver el error o saber la diferencia...
Por qué cuando utilizo arrays para intentar comparar los valores de ambos grids funciona de una forma aceptable, es decir la velocidad.
y por qué cuando intento hacerlo por medio de la sintaxis del grid tarda demasiado, cuál es la diferencia o qué estoy haciendo mal?
Aquí la forma de hacerlo con array:
Code: Select all
PROCEDURE Conciliar2()
LOCAL i
LOCAL cargo, abono
LOCAL cArchivo := HB_DirBase() + 'conciliacion.txt'
LOCAL lNuevo
aArray1 := DatosBanco()
aArray2 := DatosAuxiliar()
For i = 1 To Len (aArray1)
dDate := aArray1 [i,1]
cDesc := aArray1 [i,2]
nCargoBanco := Val(aArray1 [i,3])
nAbonoBanco := Val(aArray1 [i,4])
//MsgBox(Valtype(nCargo))
//MsgBox(Valtype(nAbono))
For j = 1 To Len (aArray2)
nCargoAux := Val(aArray2 [j,4])
nAbonoAux := Val(aArray2 [j,5])
//If aArray2 [j,1] == dDate .AND. aArray2 [j,3] == nCargo .AND. aArray2 [j,4] == nAbono
If nCargoAux == nCargoBanco .AND. nAbonoAux == nAbonoBanco
crearArchivo( cArchivo, 'fila ' + hb_NToS(j) + ' del Auxiliar --> ' + aArray2 [j,3] + ;
' Cargo --> ' + hb_NToS(nCargoAux) + ;
' Abono --> ' + hb_NToS(nAbonoAux) + hb_eol(), @lNuevo )
crearArchivo( cArchivo, 'fila ' + hb_NToS(i) + ' del Banco --> ' + cDesc + ;
' Cargo --> ' + hb_NToS(nCargoBanco) + ;
' Abono --> ' + hb_NToS(nAbonoBanco) + hb_eol(), @lNuevo )
EndIf
Next j
Next i
MsgBox('Terminado...')
RETURN
acá la forma de hacerlo recorriendo el grid:
Code: Select all
PROCEDURE Conciliar()
LOCAL i
LOCAL j
LOCAL cArchivo := HB_DirBase() + 'conciliacion.txt'
LOCAL lNuevo
MsgBox( hb_ValToExp(Win1.Grid1.ItemCount) )
FOR i=1 TO Win1.Grid1.ItemCount // BANCO
cDescBanco := Win1.Grid1.CellEx(i, 3)
nCargoBanco := Val(Win1.Grid1.CellEx(i, 4))
nAbonoBanco := Val(Win1.Grid1.CellEx(i, 5))
FOR j := 1 TO Win1.Grid2.ItemCount // AUXILIAR
MsgBox( hb_ValToExp(Win1.Grid2.ItemCount) )
cDescAux := Win1.Grid2.CellEx(i, 4)
nCargoAux := Val(Win1.Grid2.CellEx(i, 5))
nAbonoAux := Val(Win1.Grid2.CellEx(i, 6))
IF nCargoAux == nCargoBanco .AND. nAbonoAux == nAbonoBanco // ENCONTRÓ ALGUNA COINCIDENCIA
crearArchivo( cArchivo, 'fila ' + hb_NToS(j) + ' del Auxiliar --> ' + cDescAux + ;
' Cargo --> ' + hb_NToS(nCargoAux) + ;
' Abono --> ' + hb_NToS(nAbonoAux) + hb_eol(), @lNuevo )
crearArchivo( cArchivo, 'fila ' + hb_NToS(i) + ' del Banco --> ' + cDescBanco + ;
' Cargo --> ' + hb_NToS(nCargoBanco) + ;
' Abono --> ' + hb_NToS(nAbonoBanco) + hb_eol(), @lNuevo )
ENDIF
NEXT j
NEXT i
MsgBox('Terminado...')
RETURN
Qué estoy haciendo mal?... que por cierto estoy alcanzando el grado de frustración que estoy cerca de tirar la toalla...
Saludos,
Javier
Re: Cambiar imagen de columna en un grid
Posted: Thu Mar 04, 2021 2:40 am
by AUGE_OHR
hi,
try
Code: Select all
Win1.Grid2.hide()
FOR j := 1 TO Win1.Grid2.ItemCount
..
NEXT
Win1.Grid2.Show()
does Speed change
