recorrer un grid para obtener el valor de una celda

1,743 views
Skip to first unread message

E. Morillo

unread,
Aug 19, 2015, 11:47:43 AM8/19/15
to Comunidad de Visual Foxpro en Español
Hola a todos, agradecería vuestra ayuda con un pequeño problema.

Resulta que tengo un grid con datos referentes a la cantidad, código, descuento, peso, etc., y en dicho grid se van añadiendo líneas cada vez que se pulsa la flecha inferior del teclado, como suele ser habitual en la mayoría de grids.

La cuestión es que tengo que impedir de algún modo, que tras añadirse una nueva línea, ésta la dejen sin datos es decir, impedir que se dejen valores "empty" en la primera columna y segunda, y tampoco que en la columna21 que el valor sea 0

Estoy intentando modificar el método "Beforerowcolchange" o el método "valid" y con aplicando el código siguiente:

if this.columna21.gridfield1.value=0 or empty(this.columna1) or empty(this.columna2)
thisform.PESTAÑA1.PAG2.LblSinPeso.Visible=.T.     && muestro un texto indicando que rellene la línea o que la borre
return
else
thisform.PESTAÑA1.PAG2.LblSinPeso.Visible=.F.     &&"Hay valores en la fila"
endif

Se que se podría hacer también en la tabla, pero en principio me gustaría evitar que llegaran a la tabla dichos valores.

Gracias de antemano por la ayuda que podáis ofrecerme.

Jose Mario

unread,
Aug 19, 2015, 12:52:54 PM8/19/15
to Comunidad de Visual Foxpro en Español
lo que hago que al final al guardar no incluya estos blancos

DELETE FROM (lcTabla) WHERE Condicion 

que trabajas ahi curso,r tabla o que


o le quitas que agregue lineas en blanco 

hay una propiedad en el grid allowaddnew .f.

y lo haces automatico, que cuando termine de llenar la linea

se te agregue solo una linea

Víctor Hugo Espínola Domínguez

unread,
Aug 19, 2015, 5:30:33 PM8/19/15
to publice...@googlegroups.com
Hola E. Morillo

Una forma es usar un contador de ceros en las columnas pertinentes y permitir salir del grid y/o agregar filas solo si ese contador está en cero. Adjunto un sencillo ejemplo donde no se permite cero en las columnas 1, 2 y 4.

Saludos,
Víctor.
Lambaré - Paraguay.

ValidGrid._rar

E. Morillo

unread,
Aug 20, 2015, 9:53:57 AM8/20/15
to Comunidad de Visual Foxpro en Español
Gracias por contestar Victor Hugo y José Marío.

José, estoy utilizando un cursor donde cargo los valores y luego los envío a la tabla por medio del mismo, pero la cuestión es que quería que antes de pulsar el botón aceptar que es cuando envía los valores, mi intención es que borraran dicha línea mostrándoles un texto para que lo tuvieran en cuenta, por eso no quería pasar por la tabla, aunque si es necesario y no hay más remedio que no tengo acceso a otra opción pues acabaré borrando la línea de la tabla.

Pero la cuestión es que me gustaría en principio poner ese filtro.
Estoy mirando las posibilidades que tiene la propiedad allowaddnew en false, pero cuando se agrega la línea, el problema es que debo de impedir que esa línea que hayan agregado, que no permita que la aplicación pueda enviarla al cursor sin datos.

También estoy viendo el ejemplo que ha enviado Victor Hugo, pero no consigo ver en dicho ejemplo el efecto que necesito, quizás por mi inexperiencia en VFP.

Si pudiera conseguir como recorrer las líneas del grid y que me dijera si hay una línea de la columna por ejemplo 21 cuyo valor es 0, eso sería suficiente, pero siempre me sale un error en el código.

E. Morillo

unread,
Aug 20, 2015, 9:59:57 AM8/20/15
to Comunidad de Visual Foxpro en Español
Por ejemplo, el siguiente código lo haría más o menos en VBA para Excel, si alguien me ayuda a pasarlo a VFP, me haría un favor.

Sub TestValor0()
      Dim x As integer
      Dim found As Boolean
      ' Seleccionar primera línea de datos.
      Range("A2").Select 
      ' Establecer un valor de búsqueda variable.
      x = 0
      ' Establecer la variable booleana "found" en false.
      found = False
      ' Configurar el bucle Do para que se detenga al llegar a una celda vacía.
      Do Until IsEmpty(ActiveCell)
         ' Buscar valor de búsqueda en celda activa.
         If ActiveCell.Value = x Then
            found = TRUE
            Exit Do
         End If
         ' Bajar 1 fila de la ubicación actual.
         ActiveCell.Offset(1, 0).Select
      Loop
   ' Buscar el valor found.
      If found = True Then
         Msgbox "Hay un Valor 0 encontrado en la celda " & ActiveCell.Address
      Else
         Msgbox "Valor no encontrado"
      End If
   End Sub

Víctor Hugo Espínola Domínguez

unread,
Aug 20, 2015, 10:04:17 AM8/20/15
to publice...@googlegroups.com
Hola E. Morillo

El ejemplo que envié no permite salir del grid mientras haya alguna celda en las columnas 1, 2 y 4 que tenga el valor cero, tampoco permite que se agregue una fila hasta que se sustituyan todos los ceros.

Saludos,
Víctor.
Lambaré - Paraguay.

Mario Oviedo

unread,
Aug 20, 2015, 10:18:34 AM8/20/15
to publice...@googlegroups.com
para comenzar yo trabajo con un cursor

tengo una pantalla en donde le digo al usuario que quiere hacer adicionar o nueva
en ambos casos puede agregar un registro en blanco

antes de grabar, por tengo un botom que dice grabar y antes de grabar del cursor a la tabla
sele temporal

COUNT to cuantos for tipom=" " and ! EMPTY(fecha) and ! EMPTY(descrip) and cargo+abono<>0 and ! deleted()
if cuantos=0
   messagebox("No hay registros que grabar",0+32+0,"Presione Enter")
   retur 0
endif

with thisform

IF opc=3 OR opc=4
DELETE FROM temporal WHERE EMPTY(fecha) OR EMPTY(descrip) OR cargo+abono=0


en el keypress del grid de la ultima columna

If nKeyCode=13 and (opc=3 OR opc=4)
GO BOTTOM in temporal
IF ! EMPTY(temporal.fecha)
  sele temporal
  append blank
  thisform.grid1.fecha.text1.setfocus
  go BOTTOM in temporal
  keyboard '{dnarrow}'  
  thisform.grid1.Refresh
ENDIF
ENDIF
This.Parent.Parent.refresh





panta.jpg

E. Morillo

unread,
Aug 20, 2015, 11:15:50 AM8/20/15
to Comunidad de Visual Foxpro en Español
Voy a hacer pruebas tomando de ambas respuestas lo que pueda y en caso positivo, ya os comento...

Seguro que me surgirán más dudas y problemas, pero en principio se agradece mucho vuestra ayuda...  






El miércoles, 19 de agosto de 2015, 17:47:43 (UTC+2), E. Morillo escribió:

Víctor Hugo Espínola Domínguez

unread,
Aug 20, 2015, 11:41:34 AM8/20/15
to publice...@googlegroups.com
Hola E. Morillo

Ahí te envío el ejemplo mejorado para que se ubique en la primera celda con valor cero. Mira el método UbicarCelda0.

Saludos,
Víctor.
Lambaré - Paraguay.

ValidGrid2._rar

Mario Oviedo

unread,
Aug 20, 2015, 1:12:30 PM8/20/15
to publice...@googlegroups.com
BUEN TRABAJO

E. Morillo

unread,
Aug 20, 2015, 1:23:26 PM8/20/15
to Comunidad de Visual Foxpro en Español
Exactamente esto es lo que necesito...   voy a adaptarlo, creo que con esto es suficiente...

un millón de gracias...

E. Morillo

unread,
Aug 20, 2015, 1:26:29 PM8/20/15
to Comunidad de Visual Foxpro en Español
Gracias José Marío, la verdad es que entre los dos me habeis salvado...

Un saludo y espero serviros también de ayuda en un futuro...
Reply all
Reply to author
Forward
0 new messages