FoxPro/Visual FoxPro - error validacion checkbox

 
Vista:
sin imagen de perfil

error validacion checkbox

Publicado por andrey (5 intervenciones) el 10/11/2022 14:54:05
cree un formulario donde tengo una grilla y una columna con un checkbox, tengo un boton llamadao procesar con el siguiente codigo.


If thisform.Grid1.Column1.Check1.Value = .T.
select proveedor
update proveedor marcar = 2 where marcar =1
endif

esta es la configuracion del checkbox

thisform.Grid1.Column1.CurrentControl = "Check1"
thisform.Grid1.Column1.Check1.AutoSize = .T.
thisform.Grid1.Column1.Check1.Caption = ''
thisform.Grid1.Column1.Check1.BackStyle = 0
thisform.Grid1.Column1.Check1.Value = .F.
thisform.Grid1.Column1.Sparse = .F.
thisform.Grid1.Column1.Visible = .T.

cuando le doy click al boton procesar me sale el error
Operator / operand type mismatch.

cambie el codigo del boton

If thisform.Grid1.Column1.Check1.Value
select proveedor
update proveedor marcar = 2 where marcar =1
endif

ahora sale el error Data type mismatch.
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

error validacion checkbox

Publicado por Fidel José (657 intervenciones) el 11/11/2022 21:36:59
No veo a asignación de ControlSource para el campo. Esto es fundamental para que no caiga en cualquier campo del cursor.
Tampoco veo si se ha creado o no un control "Checkbox" en la columna, cosa que probablemente hagas en forma manual

Atención:
If thisform.Grid1.Column1.Check1.Value = .T. Esto está MAL!!!!
Esa comprobación debe hacerse al campo del cursor (o tabla) asociada al grid (Grid1.REcordSource)
Supongamos que el ControlSource del Check1 de la column1 es ".Marca":

IF EVALUATE(thisform.Grid1.RecordSource+".Marca") && si es un campo lógico no debes poner = .T. o = .F.
* Remplazar valor o la acción que se necesite
ENDIF
Si tomas la referencia thisform.Grid1.Column1.Check1.Value no tienes manera de saber a qué registro de la tabla o cursor te estás refiriendo, porque esa referencia es exactamente la misma para cualquier registro de la tabla o cursor.


En general, la disposición para que funcione correctamente un Checkbox en un control grid, es la siguiente (yo trabajo con el objeto Columns() pero .Columns(1) es lo mismo que .Column1, solo que es más práctico para escribir código mutable.

1
2
3
4
5
6
7
8
9
10
11
12
13
wi = 1
lcControlSource = lcNombreCursor+"."+lcNombreCampoLogico    && Ejemplo: lcControlSource = "Proveedor.Marca"
WITH Thisform.Grid1
	.Columns[m.wi].ControlSource=m.lcControlSource
	.Columns[m.wi].sPARse=.F.
	IF !PEMSTATUS(.Columns[m.wi],"Check1",5)
		.Columns[m.wi].AddObject("Check1",'CheckBox')
	endif
	.Columns[m.wi].CurrentControl="Check1"
	.Columns[m.wi].Check1.Caption=""
	.Columns[m.wi].Check1.Centered = .t.
	.Columns[m.wi].Check1.Visible=.t.
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