Cambiar imagen de columna en un grid

HMG en Español

Moderator: Rathinagiri

Post Reply
jparada
Posts: 430
Joined: Fri Jan 23, 2009 5:18 pm

Cambiar imagen de columna en un grid

Post by jparada »

Hola,

La pregunta es cómo cambiar una imagen que asigné a una columna en un grid, por ejemplo:
img1.png
img1.png (47.17 KiB) Viewed 994 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
martingz
Posts: 394
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico

Re: Cambiar imagen de columna en un grid

Post 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
efewgfqee.jpg (97.19 KiB) Viewed 984 times
jparada
Posts: 430
Joined: Fri Jan 23, 2009 5:18 pm

Re: Cambiar imagen de columna en un grid

Post 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
martingz
Posts: 394
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico

Re: Cambiar imagen de columna en un grid

Post 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
jparada
Posts: 430
Joined: Fri Jan 23, 2009 5:18 pm

Re: Cambiar imagen de columna en un grid

Post 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
User avatar
AUGE_OHR
Posts: 2060
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: Cambiar imagen de columna en un grid

Post 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 :idea:
have fun
Jimmy
Post Reply