Página 1 de 1

Click en Header Browse

Publicado: Sab Sep 19, 2020 9:56 pm
por 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

Publicado: Lun Sep 21, 2020 10:22 am
por 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

Publicado: Lun Sep 21, 2020 12:53 pm
por 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:

Código: Seleccionar todo

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

Re: Click en Header Browse

Publicado: Vie Sep 25, 2020 11:43 am
por buzonjmartial
Buenos días Ignacio,

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

Re: Click en Header Browse

Publicado: Vie Sep 25, 2020 1:33 pm
por ignacio
buzonjmartial escribió: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:

Código: Seleccionar todo

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

Publicado: Dom Sep 27, 2020 11:16 pm
por 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:

Código: Seleccionar todo

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