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.


Responder a