Botones subir y bajar en un Grid

122 views
Skip to first unread message

Jonathan Serrano R.

unread,
Aug 30, 2023, 2:03:24 PM8/30/23
to Comunidad de Visual Foxpro en Español
Hola compañeros me podrían ayudar con el siguiente caso: estoy elaborando un proceso donde pueda cambiar la selección del item de un cursor por medio de botones

ejemplo1.png
 Utilizo este código para subir 

SELECT cur_detalle_ticket

x=RECNO()

IF x=1
LOCATE FOR RECNO()=1

ELSE
   
LOCATE FOR RECNO()=x-1

ENDIF

thisform.grid_ticket.Refresh

------------------------------------------------

utilizo este código para bajar 

SELECT cur_detalle_ticket

x=RECNO()
   
LOCATE FOR RECNO()=x+1

thisform.grid_ticket.Refresh

------------------------------------------------

Me funciona bien si no borro ningún articulo del grid.

El problema radica cuando elimino un articulo del grid, ejemplo borro el articulo que  se encontraba en el campo 3 teniendo el grid 6 artículos cuando le doy al botón subir llega hasta el campo 4 y muestra "Record: EOF/6"  porque ya no se encuentra el record 3 y el Recno() debería ser 3 porque resta 1 para que el recno sea =recno() posicion 2 

ejemplo2.png

Como podría solucionarlo si me ayudan por favor 

Ricardo Soldini

unread,
Aug 30, 2023, 2:27:30 PM8/30/23
to Comunidad de Visual Foxpro en Español
y si desde el boton up/arriba pones 
select tu_cursor
skip -1 
thisform.grid1.refresh

y desde el boton down/abajo
select tu_cursor
skip  1 
thisform.grid1.refresh

podria resultar

Jonathan Serrano R.

unread,
Aug 30, 2023, 4:52:29 PM8/30/23
to Comunidad de Visual Foxpro en Español
muchas gracias Ricardo me funciona bien 

me podrías ayudar con este caso que me se sucede ahora:

cuando elimino un articulo del grid lo borro y aplico un Go Bottom para que la selección se vaya al final 

Select cur_detalle_ticket
DELETE
Go Bottom

Screenshot_1.png

Pero el Record se le posiciona en EOF y para se suba tengo que presionar 2 veces el botón de subir 

como podría hacer para que el Go Bottom no se vaya al  EOF y mas bien se vaya al ultimo registro

Zarlu

unread,
Aug 30, 2023, 5:11:03 PM8/30/23
to Comunidad de Visual Foxpro en Español
Buenas tardes tanwt308 !

Para no tener que codificar el BOF() y EOF()

Subir:
Thisform.grid1.SetFocus
IF Thisform.grid1.RelativeRow=1
Thisform.grid1.Doscroll(0)
EndIf
Thisform.grid1.activatecell(Thisform.grid1.RelativeRow-1,Thisform.grid1.RelativeColumn)
Thisform.grid1.Refresh

Bajar:
Thisform.grid1.SetFocus
Thisform.grid1.activatecell(Thisform.grid1.RelativeRow+1,Thisform.grid1.RelativeColumn)
Thisform.grid1.Refresh


Suerte
zarlu
Chetumal, Quintana Roo, México

Ricardo Soldini

unread,
Aug 30, 2023, 5:18:24 PM8/30/23
to Comunidad de Visual Foxpro en Español
Select cur_detalle_ticket
DELETE
Go Bottom

Thisform.GRID1.Refresh
Thisform.GRID1.Columns(1).SetFocus()

Jonathan Serrano R.

unread,
Aug 30, 2023, 5:21:18 PM8/30/23
to Comunidad de Visual Foxpro en Español
Muchísimas gracias  Zarlu

me funcionó de maravilla, gracias por el aporte 

Zarlu

unread,
Aug 30, 2023, 5:33:01 PM8/30/23
to Comunidad de Visual Foxpro en Español
Que tal

Dices:
"...cuando elimino un articulo del grid lo borro y aplico un Go Bottom para que la selección se vaya al final
como podría hacer para que el Go Bottom no se vaya al  EOF y mas bien se vaya al ultimo registro.."

Un poco raro lo que comentas, podría ser el resultado de usar "SKIP" en el último registro

Quizá así:
SELECT datos
Delete
GO RECCOUNT()
Thisform.grid1.SetFocus

Suerte
zarlu
Chetumal, Quintana Roo, México

Jonathan Serrano R.

unread,
Aug 30, 2023, 6:05:23 PM8/30/23
to Comunidad de Visual Foxpro en Español
Gracias Zarlu

Quizá así:
SELECT datos
Delete
GO RECCOUNT()
Thisform.grid1.SetFocus

me funcionó  bien ! 

Damian Lana

unread,
Aug 31, 2023, 8:07:33 AM8/31/23
to publice...@googlegroups.com
Buenos días, si antes de borrar te moves un registro hacia abajo para tomar el numero, esto si el nro de registro no corresponde a la posición,   y luego volves al registro tomado

*** borrado 
lnreg_a_borrar = recno()
lnreg_a_anterior = recno()
if !bof()
      skip -1
     lnreg_a_anterior = recno()
else
     if !eof()
      skip
      lnreg_a_anterior = recno()
      endif
endif 
 go lnreg_a_borrar
dele 
if lnreg_a_borrar <>lnreg_a_anterior 
     go lnreg_a_anterior 
endif


Saludos Damian Lana
Mendoza Argentina

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/3bef8cf6-78dd-45e9-8c82-00bdbda042d9n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages