Page 1 of 2

Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 5:22 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 5:54 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 6:27 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 6:43 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 7:16 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 7:40 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 7:50 pm
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

Re: Dar valor a una celda en Grid

Posted: Mon Apr 29, 2013 7:59 pm
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

Re: Dar valor a una celda en Grid

Posted: Tue Apr 30, 2013 8:06 am
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

Dar valor a una celda en Grid

Posted: Fri Dec 13, 2013 11:58 pm
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. ;)