http://sandstorm36.blogspot.com.ar/2012/07/drag-drop-and-retain-it-part-ii-grid.html
Autor: Jun Tangunan
Traducido por: Luis Maria Guayán
Arrastrar, soltar y conservar las posiciones - Parte II - Columnas de una cuadricula

Debido al ejemplo de "Arrastrar, soltar y conservar posiciones" que publiqué anteriormente, una nueva solicitud se hizo dentro del foro (Nota del Traductor: Foxite Forum) y esta vez se trata de reordenar las columnas de una cuadrícula sobre la marcha y guardar esa configuración.
Yo pensaba llamar esto "Trucos de cuadrícula # 6" porque se trata de trucos de cuadrícula, pero al final me decidí a hacer esta la parte 2 parte 2 de "Arrastrar, soltar y conservar las posiciones".
De todos modos, aquí está cómo hacerlo. Siempre se debe tener algo primero para guardar la configuración y luego para recuperar, una tabla es mi mejor opción. Esto es simple y solo para que sirva de guía. Puede ser necesario que usted tenga que guardar el nombre del formulario y el nombre de la cuadrícula para algo mas completo
Aquí está el código de ejemplo, si estás interesado:
LOCAL oForm
oForm = NEWOBJECT("Form1")
oForm.SHOW
READ EVENTS
RETURN
DEFINE CLASS Form1 AS FORM
HEIGHT = 390
WIDTH = 500
AUTOCENTER = .T.
CAPTION = 'Reordenar las columnas y conservarlas'
SHOWTIPS = .T.
ADD OBJECT label1 AS LABEL WITH ;
CAPTION = 'Arrastre y suelte para reordenar columnas. Luego cierre y ' + ;
'vuelva a abrir formulario para ver si la disposición está guardada', ;
TOP = 10, LEFT = 10, WIDTH = 480, HEIGHT = 40, WORDWRAP = .T.
ADD OBJECT grid1 AS GRID WITH ;
COLUMNCOUNT = 3,;
HEIGHT = 328, LEFT = 10, TOP = 50, WIDTH = 480,;
GRIDLINES = 3, DELETEMARK = .F.,;
GRIDLINECOLOR = RGB(192,192,192),;
GRIDLINES = 0, FONTNAME = 'Tahoma', FONTSIZE = 8,;
ANCHOR = 15, ALLOWCELLSELECTION = .F.,;
TOOLTIPTEXT = 'Drag Column to Rearrange'
PROCEDURE LOAD
SET TALK OFF
SET SAFETY OFF
CLOSE DATABASES ALL
SELECT company, contact, TITLE FROM (HOME(2)+"data\customer") WHERE RECNO() < 50 INTO CURSOR junk
USE IN SELECT('customer')
* Create/use a table to store grid column settings
IF !FILE("gridcolumns.dbf")
CREATE TABLE gridcolumns (ColName c(10), ColOrder I)
ELSE
USE gridcolumns IN 0 SHARED
ENDIF
ENDPROC
PROCEDURE INIT
IF RECCOUNT("gridcolumns") == 0
* First run? Save the current order of the columns
LOCAL lnloop
WITH THISFORM.grid1
FOR lnloop = 1 TO .COLUMNCOUNT
lcColName = .COLUMNS(m.lnloop).NAME
lnOrder = .COLUMNS(m.lnloop).COLUMNORDER
INSERT INTO gridcolumns VALUES (m.lcColName, m.lnOrder)
NEXT
ENDWITH
ENDIF
THIS._getorder()
ENDPROC
PROCEDURE grid1.INIT
WITH THIS
.RECORDSOURCETYPE = 6
.RECORDSOURCE = 'junk'
.Column1.Header1.CAPTION = 'Column1'
.Column2.Header1.CAPTION = 'Column2'
.Column3.Header1.CAPTION = 'Column3'
.SETALL('Width',150,'Column')
* Bind Move Events
FOR lnloop = 1 TO .COLUMNCOUNT
BINDEVENT(.COLUMNS(m.lnloop),'Moved',THISFORM,'_Moved')
NEXT
ENDWITH
ENDPROC
PROCEDURE _Moved
* Save new column orders
LOCAL lnloop
WITH THISFORM.grid1
FOR lnloop = 1 TO .COLUMNCOUNT
lcColName = ALLTRIM(.COLUMNS(m.lnloop).NAME)
lnOrder = .COLUMNS(m.lnloop).COLUMNORDER
REPLACE ColOrder WITH m.lnOrder FOR ALLTRIM(ColName) = m.lcColName IN gridcolumns
NEXT
ENDWITH
ENDPROC
PROCEDURE _getorder
* Fetch Column Orderings
SELECT gridcolumns
LOCAL lnloop
WITH THISFORM.grid1
FOR lnloop = 1 TO .COLUMNCOUNT
lcColName = .COLUMNS(m.lnloop).NAME
LOCATE FOR ColName = m.lcColName
.COLUMNS(m.lnloop).COLUMNORDER = ColOrder
NEXT
.REFRESH
ENDWITH
ENDPROC
PROCEDURE DESTROY
CLOSE DATABASES ALL
CLEAR EVENTS
ENDPROC
ENDDEFINE
No hay comentarios.:
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.