Dar valor a una celda en Grid

HMG en Español

Moderator: Rathinagiri

Agustin
Posts: 79
Joined: Sat Feb 16, 2013 10:50 pm
Location: Miranda de Ebro / España

Dar valor a una celda en Grid

Post by Agustin »

Necesito que las celdas de una columna del Grid se rellenen automaticamente con un valor concreto sin necesidad de seleccionarlas, o sea, por programa.
He visto unos ejemplos en que cambian la celda seleccionada pero o no me sirven, o no se aplicarlos.

Agradezco su ayuda.

Saludos
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Dar valor a una celda en Grid

Post by danielmaximiliano »

Hola Agústin :
yo recorro todo el Grid en forma inversa, quiere decir que de cada celda saco un contenido para sumarlo en una variable.
espero que te sirva

Code: Select all

*----------------------------------------------------------------------------*
Procedure ActualizaVenta()
*----------------------------------------------------------------------------*
 *Ventas.Articulos.DisableUpdate 
 Ventas.Text_1.Value                 := '              '                                             
 Ventas.nTotalArt.Value              := 0                                              
 Ventas.nTotal.Value                 := 0.0  
   For nFor := 1 to Ventas.Articulos.ItemCount                              
       Ventas.nTotalArt.Value        := Ventas.nTotalArt.Value  + Ventas.Articulos.Cell( nFor,2 )      
       Ventas.nTotal.Value           := Ventas.nTotal.Value     + (Ventas.Articulos.Cell( nFor,5 ) * Ventas.Articulos.Cell(nFor,2))      //
       Ventas.Articulos.Cell(nFor,6) := Ventas.Articulos.Cell(nFor,5) * Ventas.Articulos.Cell(nFor,2)
   Next   
 * Ventas.Articulos.EnableUpdate
Return
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Agustin
Posts: 79
Joined: Sat Feb 16, 2013 10:50 pm
Location: Miranda de Ebro / España

Re: Dar valor a una celda en Grid

Post by Agustin »

Gracias Daniel. Tu rutina, tal como está , me viene de maravilla, para el cálculo de un total.

La estoy probando para lo que comentaba, y me salta un error( siempre me pasa lo mismo con esta forma de codigo y tengo que usar el SetProperty :

Entradas1.Grid_Lineas.Cell( 1,3) := "Prueba" //Syntax error "syntax error at '.'"

USO HMG 3.0.46

Un saludo
gdp
Posts: 47
Joined: Mon Jan 21, 2013 12:57 am

Re: Dar valor a una celda en Grid

Post by gdp »

Hola Agustin,
lo mas probable es que te falte al declaración de la ventana.
Al principio de tu función prueba de poner
DECLARE WINDOW ENTRADAS1

Saludos

Gerardo
Agustin
Posts: 79
Joined: Sat Feb 16, 2013 10:50 pm
Location: Miranda de Ebro / España

Re: Dar valor a una celda en Grid

Post by Agustin »

Gracias Gerardo. Así no da error, pero el problema es que el nombre de la ventana necesito que sea una variable que recojo con un parámetro.
Si lo cambio por &cForm me salta error al compilar. Se puede arreglar ?

Un saludo
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Dar valor a una celda en Grid

Post by danielmaximiliano »

Agustin wrote:Gracias Gerardo. Así no da error, pero el problema es que el nombre de la ventana necesito que sea una variable que recojo con un parámetro.
Si lo cambio por &cForm me salta error al compilar. Se puede arreglar ?

Un saludo
Mira si te sirve esto.

Code: Select all

Procedure DeletePage()
Local nDelete

nDelete:= Principal.Container_Tab.Value
cLabel := "Label" + ltrim(str(nDelete))
cText  := "Text"  + ltrim(str(nDelete))
cCombo := "Combo" + ltrim(str(nDelete))

IF nDelete == Principal.Container_Tab.ItemCount - 1 .and. iscontroldefined(&cLabel,Principal)
   Principal.&(cLabel).Release
   Principal.&(cText).Release
   Principal.&(cCombo).Release
   Principal.Container_Tab.DeletePage(nDelete)
   nPage--
   IF nPage == 1
      AddNewPage()  
   ENDIF
ELSE 
   MsgInfo( "No se puede borrar el PAGE '"+Principal.Container_Tab.Caption(nDelete)+"'", "   Info  " )    
ENDIF

Return
ajusta a tu necesidad para ver si trabaja, lo hice hace tiempoy ahora esta de ejemplo en Minigui ext.
mas precisamente en C:\MiniGUI\SAMPLES\BASIC\Tab_2
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Agustin
Posts: 79
Joined: Sat Feb 16, 2013 10:50 pm
Location: Miranda de Ebro / España

Re: Dar valor a una celda en Grid

Post by Agustin »

Hola Daniel. He intentado usar tu código así:

For nFor := 1 to Entradas1.Grid_Lineas.ItemCount
Entradas1.Grid_lineas.Cell(nFor,3) := "PRUEBA"
Next

y da error de ejecución Error BASE/1069 Error de argumento: asignación del array.

Perdona mi torpeza, pero algo hago mal.

Un saludo
User avatar
danielmaximiliano
Posts: 2646
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Dar valor a una celda en Grid

Post by danielmaximiliano »

Agustin wrote:Hola Daniel. He intentado usar tu código así:

For nFor := 1 to Entradas1.Grid_Lineas.ItemCount
Entradas1.Grid_lineas.Cell(nFor,3) := "PRUEBA"
Next

y da error de ejecución Error BASE/1069 Error de argumento: asignación del array.

Perdona mi torpeza, pero algo hago mal.

Un saludo
fijate el ejemplo
C:\MiniGUI\SAMPLES\BASIC\Grid\demo3.prg
C:\MiniGUI\SAMPLES\BASIC\GRID_1\demo.prg

sino postea un ejemplo y lo corrijo
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Agustin
Posts: 79
Joined: Sat Feb 16, 2013 10:50 pm
Location: Miranda de Ebro / España

Re: Dar valor a una celda en Grid

Post by Agustin »

Gracias Daniel.

Adjunto el ejemplo que me da error.
Gracias por tu inestimable ayuda y la de este gran foro en general .


Saludos
Attachments
PRUEBA DE GRID.zip
(2.44 KiB) Downloaded 281 times
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

Dar valor a una celda en Grid

Post by Pablo César »

Hola Agustin,

Después de bastante tiempo alguien te responde... :oops:

Estube mirando tu código. En verdad a mi no me gusta utilizar el GRID directamente al DBF (con opcion de ROWSOURCE). Me gusta trabajar con vectores, mucho más flexible e más liviano.

Lo que pude ver de grave, es que tu declaras los nombres de los formulários através de variables y del componente tambien. Yo hé cambiado eso.
Recuerda que el acceso de los dato se puede hacer através del dbf, pero tienes siempre que sincronizar entre el grid y el recno del dbf.

Bueno quedó más o menos este código:

Code: Select all

/* Codigo modificado para trabajar en UNICODE
*/
#include "hmg.ch" 

REQUEST DBFCDX , DBFFPT
RDDSETDEFAULT( "DBFCDX" )

**FUNCION Entradas
FUNCTION MAIN(  )

SET DATE ITALIAN
SET CENTURY ON
SET EPOCH TO 1970
SET NAVIGATION EXTENDED
SET BROWSESYNC ON  
SET DELETED ON        
SET SOFTSEEK ON
SET LANGUAGE TO SPANISH
// SET CODEPAGE TO SPANISH
	
// Private cForm := "ENTRADAS"
Private cAliasLineas   := "ENTRADAS_Lineas"
 // aValue := { Nil , Nil }
	
aCtrl_1 := { 'COMBOBOX'	,  {'Pendiente','En proceso','Terminado'} ,  { 1 , 2 , 3 }   }
aCtrl_2 := {'TEXTBOX','CHARACTER','9999999999999'}	
aCtrl_3 := {'TEXTBOX','CHARACTER', '!AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}
aCtrl_4 := {'TEXTBOX','NUMERIC','99999,99'}
aCtrl_5 := {'TEXTBOX','NUMERIC','99999,99'}
aCtrl_6 := {'TEXTBOX','NUMERIC','999,99' }
aCtrl_7 := {'TEXTBOX','NUMERIC','999999,99' }
aCtrl_8 := {'DATEPICKER','UPDOWN'}	
aCtrl_9 := {'TEXTBOX','CHARACTER' , '99:99' }
aCtrl_10 := {'TEXTBOX','CHARACTER', '!AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}
aCtrl_11 := { 'EDITBOX' }
aCtrl_12 := {'TEXTBOX','NUMERIC','99999'}

aCamposGrid :={ '( cAliasLineas )->Estado' , '( cAliasLineas )->Operacio' , '( cAliasLineas )->NomOper' , '( cAliasLineas )->Cantidad' , ;
				'( cAliasLineas )->Precio' , '( cAliasLineas )->Dto' , '( cAliasLineas )->Importe' , '( cAliasLineas )->Fecha' , ;
				'( cAliasLineas )->Hora' ,'( cAliasLineas )->Operario' , '( cAliasLineas )->Notas' , '( cAliasLineas )->Codigo' } 	
	
	
USE Lineas ALIAS ( cAliasLineas ) NEW   SHARED 
/*	INDEX ON OPERACIO TO Lineas  // siempre es bueno rehacer los indices
Set Index to Lineas */
					 
DEFINE WINDOW Entradas  ;  
    AT  55,12           ;  
    WIDTH  1000         ;  
    HEIGHT 600          ;  
    TITLE 'Entradas'    ;  
    FONT 'ARIAL' SIZE 9 ;  
    MAIN                ;  
    NOMAXIMIZE          ;  
    NOSIZE   

    @ 190,30 GRID Grid_Lineas ;
		WIDTH 940 ;
		HEIGHT 300 ;
		HEADERS { "Estado" , "Operación", "Nombre Operación" , "Cantidad" , "Precio" , "Dto." , "Importe" ,"Fecha" , "Hora" , "Operario" , "Notas" , "Código"} ;
		WIDTHS  { 100 ,         100 ,        250 ,                 60 ,        70 ,      50 ,      70 ,       100 ,     50 ,      250 ,      50    ,     40   } 	;	
		EDIT ;
		VALUE { 1 , 1 } ;
		COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 , aCtrl_7 , aCtrl_8 , aCtrl_9 , aCtrl_10 , aCtrl_11 , aCtrl_12 } ;
		ROWSOURCE cAliasLineas ;
		COLUMNFIELDS aCamposGrid ;
		ALLOWAPPEND 


	DEFINE BUTTON Cambia
        ROW    100
        COL     200			
		ACTION  CambiaValor(Entradas.Grid_Lineas.Value)
		CAPTION "Cambiar valor"
		WIDTH 300 
		HEIGHT 40						
	END BUTTON  
			
	DEFINE BUTTON Button_1
	    ROW    500
	    COL    10
	    WIDTH  100
	    HEIGHT 28
	    ACTION DoMethod("Entradas","Grid_Lineas","Save" )
	    CAPTION "Grabar"
	END BUTTON

END WINDOW
Entradas.Center
Entradas.Activate
RETURN NIL

STATIC FUNCTION CambiaValor(aItem)
nRec:=Entradas.Grid_Lineas.Recno
Goto nRec
If RLock()
   ( cAliasLineas )->NomOper := "CAMBIADO1"
   Unlock
Endif
DoMethod("Entradas","Grid_Lineas","Refresh" )
Return nil
Espero que te guste y te sirva. :)

Recuerda tambien que si tienes que trabajar con la IDE o hasta mismo en la linea de comando: el nombre de tu carpeta no debe contener espacios, quitalos. ;)
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
Post Reply