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
Compartir Articulo: