Visual Foxpro : Mover registro a otra posicion en un grid
Fecha Publicación:
05 de Enero de 2024
Fecha Modificación:
08 de Enero de 2024
Solucion 1
Codigo Visual Foxpro
SELECT 1 FROM cDetalleProductos WHERE selecciona INTO CURSOR cPaso
lnCantSel =_TALLY
CierraAlias ("cPaso")
IF lnCantSel=0
MESSAGE("Debe haber al menos un producto seleccionado.")
RETURN
ENDIF
ThisForm.migrdl.gridl.Recordsource = ""
lnNumLinea = cDeralleProductos.num_Linea
SELECT * FROM cDeralleProductos WHERE | selecciona
AND num_linea < lnNumLinea INTO CURSOR cDetalleProductos2 READWRITE
APPEND FROM DBF("cDetalleProductos") FOR selecciona
APPEND FROM DBF("cDetalleProductos") FOR ! selecciona AND num_linea >= lnNumLinea
REPLACE selecciona WITH .F., num_linea WITH RECNO() ALL
CierraAlias ("cDetalleProductos")
USE DBF("cDetalleProductos2") AGAIN ALIAS cDetalleProductos IN 0
CierraAlias ("cDetalleProductos2")
GO cDetalleProductos IN cDetalleProductos
Thisform.migrdl.gridl.RecordSource = "cDetalleProductos"
Thisform.migrdl.gridl.doScroll(0)
Thisform.migrdl.gridl.doScroll(0)
Thisform.migrdl.gridl.doScroll(0)
Thisform.migrdl.gridl.SetFocus
Solucion 2
Ok, usa un índice entonces. Podrías agregarle a tu cursor un campo numérico llamado ORDEN_MOSTRADO (por ejemplo) y colocas en ese campo llamado ORDEN_MOSTRADO los números 1, 2, 3, 4, ... etc. y creas un índice según ORDEN_MOSTRADO.
De esa manera cada vez que refresques tu control grid verás a los registros con el orden que tienen en tu campo ORDEN_MOSTRADO.
Exactamente eso es, si se mueve por decir el registro 7 a la posición 3, el 7 pasa a ser 3 y el 3 se le suma 1 y así el resto hasta llegar al final, por ende se debe refresacar y quedará el orden deseado, lo mismo si se quiere hacer insersiones en medio de registros
Articulo : 393 - Veces Leidas