Una muy fácil es poner este código en el click del header de la columna
que querés ordenar:
Ej:
** click en el header de la columna 1
select clientes
set order to cuenta
this.parent.parent.refresh
** click en el header de la columna 2
select clientes
set order to empresa
this.parent.parent.refresh
Rafael Copquin
El 29/03/2014 18:12, Ramon Giubi escribió:
Yo tengo esto por si te sirve
Creo 2 metodos en la grilla : CREAR_TAG y SELECT_ORDER
y una propiedad : lcOrden
******************************
CREAR_TAG
*******************************
IF !EMPTY(THIS.RECORDSOURCE)
LOCAL lSet AS STRING
lSet=SET("Safety")
SET SAFETY OFF
SELECT (THIS.RECORDSOURCE)
LOCAL ln_cuantos AS INTEGER,ic AS INTEGER,lc_indice AS STRING,lc_tag
AS STRING
LOCAL ARRAY la_campos[1]
ln_cuantos= AFIELDS(la_campos,THIS.RECORDSOURCE)
FOR ic=1 TO ln_cuantos
IF la_campos[ic,2]$"CDTIN"
lc_tag=IIF(la_campos[ic,2]='D' OR
la_campos[ic,2]='T',"DTOS("+la_campos[ic,1]+")",la_campos[ic,1])
lc_indice=LEFT(la_campos[ic,1],9)
cIndiceAsc = 'Index On ' + lc_tag+ ' Tag '+ "A"+lc_indice+' Additive'
&cIndiceAsc
cIndiceDes = 'Index On ' + lc_tag+ ' Tag '+
"D"+lc_indice+' Descending Additive'
&cIndiceDes
ENDIF
NEXT
SET SAFETY &lSet
THIS.lcorden=''
ENDIF
****************************************
SELECT_ORDER
****************************************
LOCAL lCorden AS STRING,lCcampo AS STRING
TRY
AEVENTS(laEventos,0)
lCorden = laEventos[1].PARENT.CONTROLSOURCE
IF !EMPTY(lCorden) AND VARTYPE(EVALUATE(lCorden))$"CDTN"
FOR EACH loObjects IN THIS.OBJECTS
FOR EACH loControls IN loObjects.CONTROLS
IF UPPER(loControls.BASECLASS)="HEADER"
loControls.PICTURE=''
ENDIF
ENDFOR
ENDFOR
lCcampo=SUBSTR(lCorden,AT('.',lCorden)+1)
lCorden="A"+LEFT(lCcampo,9)
laEventos[1].PICTURE="Arriba.gif"
IF UPPER(ALLTRIM(THIS.lCorden))==UPPER(ALLTRIM(lCorden))
lCorden="D"+LEFT(lCcampo,9)
laEventos[1].PICTURE="Abajo.gif"
ENDIF
THIS.lCorden=lCorden
SET ORDER TO lCorden
GO TOP IN (THIS.RECORDSOURCE)
THIS.REFRESH()
ENDIF
CATCH
ENDTRY
*************************************************
Y En el INIT de la grilla
*************************************************
FOR i = 1 TO THIS.COLUMNCOUNT
THIS.COLUMNS(i).sparse = .F.
ENDFOR
IF DODEFAULT()
FOR EACH loObjects IN THIS.OBJECTS
FOR EACH loControls IN loObjects.CONTROLS
IF UPPER(loControls.BASECLASS)="HEADER"
** Enlazamos el evento Click de los Headers
BINDEVENT(loControls,"Click",THIS,"Select_Order")
ENDIF
ENDFOR
ENDFOR
THIS.crear_tag()
ENDIF
Ramon
*De:*[email protected] [mailto:[email protected]] *En nombre de *Walter Comito
*Enviado el:* sábado, 29 de marzo de 2014 17:40
*Para:* GUFA List Member
*Asunto:* [GUFA] ORDENAR GRILLA
AMIGOS ALGUIEN TIENE ALGUNA RUTINA PAR ORDENAR CUALQUIER TIPO DE
GRILLA CON UN CLICK EN EL HEADER.
GRACIAS
*Walter Cómito*
Analista de Sistemas
MP 0397 C.P.C.I.P.C.
*>****[email protected] <mailto:[email protected]>*
*[email protected] <mailto:[email protected]>*
*'****+54 351 494.4667*
* 153.292.707*
**
*þ****www.softram.com.ar <http://www.softram.com.ar/>***
QSi no es necesario, no imprima este correo.
Todos somos responsables por el cuidado del medio ambiente.
*NOTA DE CONFIDENCIALIDAD*
Este mensaje (y sus anexos) es confidencial y puede contener
información de propiedad
exclusiva de Walter Cómito (SRS Sistemas). Si usted ha recibido este
mensaje por error,
por favor comuníquelo inmediatamente a _walter.comito
<mailto:[email protected]>[email protected]_y tenga la amabilidad
de eliminarlo; no deberá copiar el mensaje ni divulgar su contenido a
ninguna persona.
Muchas Gracias.