FoxPro/Visual FoxPro - permitir decimales en un grid

   
Vista:

permitir decimales en un grid

Publicado por wenceslao (134 intervenciones) el 18/11/2013 22:47:16
Buenas tardes a todos, nuevamente por aca solicitando su ayuda..
se trata de que tengo un formulario el cual tiene un grid, este grid mjuestra datos insertados en un cursor, hasta ahi toda marcha bien, pero cuando intento cargar un dato con decimales, el grid redondea y aproxima al numero mayor o menor segun sea el caso, ejemplo digito 2.3 y el cursor recibe 2 y si es 2.6 entonces redondea a 3.

La verdad necesito que registre los datos que le digito, no importa si son enteros o decimales.

De antemano les doy mis mas sinceros agradecimientos.

Saludes desde Colombia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

permitir decimales en un grid

Publicado por Fidel José (558 intervenciones) el 19/11/2013 00:06:52
Supongamos que se trata de la columna 5 del grid.

with Thisform.grid1.Columns[5].TEx1
.ControlSource="Tucursor.Importe"
.Format="Z" && impide que se vean los ceros.
.INputMask="999,999,999.99" && dos decimales y separador de miles
.width=80
endwith

Lo pones en las columnas que necesites.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

permitir decimales en un grid

Publicado por wenceslao (134 intervenciones) el 19/11/2013 14:39:48
buenos dias fidel, hice la prueba con el codigo que me recomendo, pero no me deja hacer nada, me muestra un error..

el objeto primario no permitira esta configuracion de propiedad para form1.grid1.column3.text1.Controlsource..

que debo hacer para que esto no suceda??

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

permitir decimales en un grid

Publicado por Fidel José (558 intervenciones) el 19/11/2013 16:04:08
El ControlSource para un objeto de un control grid está conformado por el nombre de la tabla o cursor del recordSource y el nombre del campo que debe mostrar ese control, encomillado.
Si tu cursor se llama: "curVentas"
Y el campo que quieres mostrar, se llama "Importe"
Thisform.grid1.REcordsource="curVentas"
Thisform.Grid1.Column3.TExt1.ControlSource= "CurVentas.Importe"
&& Debes colocarlo entre comillas (dobles o simples).

pd: Nunca escribas Form1.Grid1 ó Form2.Text1 dentro de un formulario.
Para eso se utiliza Thisform. Esta es la referencia al objeto formulario y te independiza totalmente del nombre del objeto en tiempo de ejecución. El nombre que toma un formulario en tiempo de ejecución puede ser distinto del que se consigna en la propiedad Name, dependiendo de cómo se instancia.
Thisform.Grid1.Column1.Header1.Caption="Fecha"
En métodos y eventos del formulario (solamente del formulario), Thisform = This
Para un objeto agregado al formulario, la referencia al formulario puede ser:
Thisform
ó
This.Parent
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

permitir decimales en un grid

Publicado por wenceslao (134 intervenciones) el 19/11/2013 16:33:31
hola fidel, te muestro el codigo que coloque en el formulario en el evento init

CREATE CURSOR prueba(cantidad c(10),nombre c(50))




STORE 0 TO fnit
STORE SPACE(10) TO fnombre

Thisform.grid1.recordsource = ""
THISFORM.grid1.ColumnCount=2



THISFORM.grid1.COLUMN1.width=90
THISFORM.grid1.COLUMN2.width=240

THISFORM.grid1.COLUMN1.enabled=.f.
THISFORM.grid1.COLUMN2.enabled=.f.

THISFORM.grid1.COLUMN1.HEADER1.CAPTION="Codigo"
THISFORM.grid1.COLUMN1.HEADER1.alignment=2
THISFORM.grid1.COLUMN1.ALIGNMENT= 3
THISFORM.grid1.COLUMN2.HEADER1.CAPTION="Articulo"
THISFORM.grid1.COLUMN2.HEADER1.alignment=2
THISFORM.grid1.COLUMN2.ALIGNMENT=3
thisform.grid1.column2.text1.inputmask="999.99"





Thisform.grid1.recordsource = "prueba"
thisform.Grid1.Column2.TExt1.ControlSource= "prueba.cantidad"
thisform.Refresh


pero me sigue mostrando el error que te comentaba anteriormente..."el objeto primario no admite esta configuracion de propiedad para form1.grid1.column2.text1.controsource."

en ningun momento le descrimino a que formulario debe hacer la referencia y si ves el mensaje que envia??,

que mas le puedo hacer??

Gracias por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

permitir decimales en un grid

Publicado por Fidel José (558 intervenciones) el 19/11/2013 23:58:43
Lo primero que debes hacer es ponerte de acuerdo. Si esperas que un valor se comporte como numérico, debes definirlo como numérico. Tu pones Cantidad c(10), o sea defines cantidad como un campo Character y luego esperas que sea un número.
Te pongo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
*CREATE CURSOR prueba (cantidad c(10),nombre c(50))
 
CREATE CURSOR PRUEBA ("CANTIDAD" N(10,2),"NOMBRE" C(50) )
FOR i=1 TO 10
	INSERT INTO prueba (nombre,cantidad) VALUES ("Nombre Artículo "+TRANSFORM(i) , 20.65 * i)
NEXT
SELECT prueba
GO top
 
SELECT 0    && prevenir contaminación con tablas o cursores abiertos
 
* Si no existe el objeto en el form, agrego un Control GRid.
IF !PEMSTATUS(thisform,"Grid1",5)
	thisform.NewObject("Grid1","Grid")
ENDIF
 
* Eliminar contaminación
WITH thisform.grid1
	.Columncount=-1
	.Recordsource=""
	.refresh
ENDWITH
 
* Configuración del control GRid
WITH thisform.grid1
        && configuración general
	.ColumnCount=2
	.RecordSource = "prueba"
 
         && aspecto
	.Setall("Readonly",.t.,"Column")
	.Setall("Fontsize",8,"Column")
	.Setall("Fontsize",8,"Header")
	.Setall("FontBold",.t.,"Header")
	.Setall("BackColor",Rgb(73,136,160),"Header")
	.Setall("ForeColor",Rgb(255,255,255),"Header")
	.SetAll("DynamicBackColor","IIF(MOD(RECNO( ), 2)=0, RGB(233,232,228),RGB(217,220,212))", "Column")
	.ScrollBars=2
	.GridLineColor=RGB(184,201,197)
	.DeleteMark=.F.
        .RecordMark=.T.
 
        && configuración especial de columnas (objeto Columns() )
	.Columns[1].ControlSource='Prueba.Nombre'
	.cOLUMNS[1].Header1.Caption="Nombre"
	.Columns[1].Header1.Alignment=2
	.Columns[1].Width=240
 
	.Columns[2].ControlSource='Prueba.Cantidad'
	.columns[2].Header1.Caption="Cantidad"
	.Columns[2].Header1.Alignment=2
	.columns[2].Width=90
	.Columns[2].Text1.Format="Z"
	.Columns[2].TExt1.InputMask="999,999.99"
 
 
	* Posicionamiento y tamaño
	.top=3
	.left=3
        * Decido mostrar 10 filas
	.Height=.HeaderHeight + .RowHeight * 10
 
        * Cálculo del ancho
	nWid=IIF(.RecordMark,10,0) + IIF(.ScrollBars>1,20,0) + .ColumnCount
	FOR i=1 TO .columncount
		nWid=nWid+.Columns[i].Width
	NEXT
	.Width=nWid
 
	.visible=.t.
	.refresh
ENDWITH
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar