Page 1 of 1

Click en Header Browse

Posted: Sat Sep 19, 2020 9:56 pm
by buzonjmartial
Buenas tardes,

No encuentro la manera de hacer lo siguiente:

Cuando se hace click en una columna de un browse, me la ordena automáticamente.
Pero necesito que después de ordenarla, poder ejecutar una función.
Si defino el evento onSort(), ya no me ordena, sólo ejecuta mi función.

Gracias,

Re: Click en Header Browse

Posted: Mon Sep 21, 2020 10:22 am
by ignacio
Buenos días,

Puede realizar la ordenación llamando al método TBrowse:Sort( oCol, nMode )

nMode: 1) Ascendente, -1) Descendente

Saludos

Re: Click en Header Browse

Posted: Mon Sep 21, 2020 12:53 pm
by buzonjmartial
Buenos días Ignacio,

Dime como hacerlo porque se queda recursivamente llamando al evento onSort(), le ponga que retorne Nil o 0.

Aparte que en los fuentes de Xailer, el parámetro nSort no existe:
METHOD Sort( oCol ) CLASS XArrayBrowse

Este es el código que pruebo:

Code: Select all

METHOD ArrayBrowse1Sort( oSender, aData, oCol, nAt, lDesc ) CLASS TFormScanArt
    oSender:Sort( oCol)
RETURN 0 ó NIL (NINGUNO FUNCIONA)

Re: Click en Header Browse

Posted: Fri Sep 25, 2020 11:43 am
by buzonjmartial
Buenos días Ignacio,

¿ Tiene alguna solución este tema ? ¿ O no es posible ?

Re: Click en Header Browse

Posted: Fri Sep 25, 2020 1:33 pm
by ignacio
buzonjmartial wrote:Buenos días Ignacio,

¿ Tiene alguna solución este tema ? ¿ O no es posible ?


Espero que este código y mis explicaciones resuelvan sus dudas:

Code: Select all

METHOD HeaderClick( nFlags, nPosX, nPosY ) CLASS XBrwColumn

   LOCAL xRet

   xRet := ::OnHeaderClick( nFlags, nPosX, nPosY )

   IF ( Valtype( xRet ) != "L" .OR. xRet ) .AND. ::oParent:lAutoOrder
      ::oParent:Sort( Self )
   ENDIF

RETURN xRet


Es es el código que se ejecuta cuando hace click en cualquier cabecera de columna. Como puede observar para que el método SORT se dispare son necesarias dos cosas: Que la propiedad TBrowse:lAutoOrder esté a verdadero y que si sobrecarga el evento OnHeaderClick, éste devuelva un valor NIL o un valor lógico de verdadero.

Por lo tanto, tiene esos dos mecanismos para PARAR la ejecución del método SORT por parte del control.

Un saludo

Re: Click en Header Browse

Posted: Sun Sep 27, 2020 11:16 pm
by buzonjmartial
Muchas gracias Ignacio,

Funcionando perfecta y limpiamente, necesitaba ordenar y posteriormente refrescar un proceso en la fila que se posicione.

Así lo he conseguido:

Code: Select all

METHOD onHeaderClick( oSender, nFlags, nPosX, nPosY ) CLASS TFormScanPedidos
       oSender:oParent:Sort( oSender )
       ::oTmant:clickBrwPedidos()
return .F. // No haga nada después