Page 1 of 1

xBrowse - Ayuda para ordenar

Posted: Sat Jul 25, 2009 11:46 pm
by rolando
Buenas noches,

Por más que le doy vueltas no consigo lograrlo.

Tengo un browse de oDbf en el cual, al pulsar sobre los heads ordeno por esa columna. Hasta ahí todo bién.

La cuestión es que necesito buscar por _ indexados y lo hago así:

Code: Select all

 oDbf:SetOrder(1,"SERVICE.CDX")     // ordeno por CODIGO
     oDbf:seek(cParte,.t.)
     if oDbf:found()
*       oBrw:nColSel:=3
        oBrw:refresh()
        Return .t.
     endif


     oDbf:SetOrder(7,"SERVICE.CDX")     // ordeno por NOMBRE
     oDbf:seek(cParte,.t.)
     if oDbf:found()
*       oBrw:nColSel:=3
        oBrw:refresh()
        Return .t.
     endif
 
La cuestión es que me interesaría que al volver al browse, luego de encontrar lo buscado con seek, me ordenara el browse por la columna correspondiente al índice en el que se busco, es decir como si al encontrar buscando por la clave "NOMBRE", al volver al browse yo pulsara con el ratón sobre el header de "NOMBRE".

Lo que necesito saber se resume a esto: ¿Como hago para, desde código" hacer que "SE pulse" el header que yo quiera y ordene el browse por la columna de este header.

Gracias.

Rolando :D

Re: xBrowse - Ayuda para ordenar

Posted: Sun Jul 26, 2009 12:42 am
by jrestojeda
Hola amigo, prueba lo siguiente:

oBrow:aCols[ nCol ]:cSortOrder :="NomTAG"
Ejemplo:

Code: Select all

oBrow:aCols[1]:cSortOrder   :="PROVEED1"
 
Espero te sirva.

Re: xBrowse - Ayuda para ordenar

Posted: Sun Jul 26, 2009 1:04 am
by rolando
Gracias por responder,

Creo que no entendiste lo que necesito hacer.

La línea asignando el orden a cada columna las defino cuando hago el "add" de cada columna del browse y no es el problema.

La cuestión es, vamos a suponer que el operador presiona el izquierdo del mouse sobre el header de la coumna dos, así queda ordenado el browse por esa columna, si presiona sobre la tres, queda ordenado por la tres, etc.

Ahora bién, en mi sistema, tengo un botón "Buscar" el que luego de hacer un get para entrar el dato a buscar, realiza un seek en tres indices distintos (obviamente de a uno por vez). Por ej, busca primero por el indice que afecta a la columna 1 y si no encuentra el dato, busca por el indice que afecta a la columna 2 y, si no encuentra nada ahí, busca por el indice que afecta a la columna 3.

Dependiendo de en cual columna encontró el dato buscado, me interesaría que además de ordenar los datos por el índice correspondiente (cosa que se hacer), LA COLUMNA QUE SE CORRESPONDE CON EL INDICE EN EL QUE SE ENCONTRÓ EL DATO QUEDE CON SU HEADER TENIENDO LA FLECHITA QUE INDICA QUE ESTÁ ODENADO POR ESA COLUMNA, es decir, como si presionara el botón izquierdo del mouse sobre el header de esa columna.

Gracias.

Rolando :D

Re: xBrowse - Ayuda para ordenar

Posted: Mon Jul 27, 2009 1:07 pm
by acuellar
Rolando, prueba con esto

En tu Xbrowse define tus columnas asi:

Code: Select all

 oCol := oBrw:AddCol()
   oCol:bStrData  := { || LCV->FACTURA}
   oCol:nHeadStrAlign := AL_CENTER
   oCol:cHeader   := "FACTURA"
   oCol:nWidth:=59
   oCol:nDataStrAlign := AL_CENTER
   oCol:cSortOrder:= ORDTAG1     //El nombre del TAG de tu indice
   oCol:bLClickHeader:= {|| Inicio() }

   oCol := oBrw:AddCol()
   oCol:bStrData  := { || LCV->CLIENTE }
   oCol:nHeadStrAlign := AL_CENTER
   oCol:cHeader:= "N O M B R E"
   oCol:nWidth:=208
   oCol:cSortOrder:= ORDTAG2
   oCol:bLClickHeader:= {|| Inicio() }

*Activar el  pulsado de teclas dentro del xBrowse
      @1,80 GET oVar1 VAR xClave OF oDlg READONLY  //TE MOSTRARA LAS TECLAS QUE SE VAN PULSANDO

    oBrw:bKeyDown:={|nKey| iif( nKey >=96 .AND. nKey <=105, nKey-= 48, ), iif( nKey == VK_ESCAPE , (oDlg:End()),Nil ), ;
             iif( nKey == VK_BACK  , ( xClave:= SUBSTR( xClave,1,LEN( xClave )-1 ), iif(EMPTY(xClave),oBrw:GoTop(),dBSeek( xClave )),oBrw:Refresh(), oVar1:Refresh() ), ), ;
         iif( nKey>=32 .AND. nKey<=128, ( dBSeek( xClave+UPPER(CHR(nKey) ) ),iif( !EOF(), xClave+=UPPER(CHR(nKey)), ),dBSeek(xClave),oBrw:Refresh(),oVar1:Refresh() ),)}
  
*La función Inicio para poner en blanco las teclas pulsadas y mandar el puntero al inicio
  Static Function Inicio()
    (xClave:="",oVar1:Refresh(),oBrw:GoTop(),oBrw:SetFocus()) 
 Return Nil
 

Tus campos tienen que ser de caracter

Espero te sirva

Saludos

Adhemar

Re: xBrowse - Ayuda para ordenar

Posted: Mon Jul 27, 2009 2:49 pm
by RodMG
Hola, Rolando.

===============
"LA COLUMNA QUE SE CORRESPONDE CON EL INDICE EN EL QUE SE ENCONTRÓ EL DATO QUEDE CON SU HEADER TENIENDO LA FLECHITA QUE INDICA QUE ESTÁ ODENADO POR ESA COLUMNA, es decir, como si presionara el botón izquierdo del mouse sobre el header de esa columna."
===============

Para lograrlo, una vez que determines la columna que deba tener la flechita, utiliza esto:

::oBrowse:aCols[ nNumeroDeColumna ]:HeaderLButtonUp( 0, 0, 0 )


Espero que te sea de utilidad.

Saludos

Rod MG

Re: xBrowse - Ayuda para ordenar

Posted: Mon Jul 27, 2009 7:42 pm
by rolando
Adhemar,

Gracias por responder, pero creo que no es lo que ando buscando.


Rod,

Gracias por responder. Lo tuyo se acerca a lo que busco. Ya lo había logrado usando

Code: Select all

oBrw:aCols[3]:SetOrder()
Que hace lo mismo. El problema ahora es que si busco por otra columna y la ordeno por ella y pretendo marcar ese header, lo hace bién pero queda marcado también el anterior.

Si conoces alguna forma de "desmarcar" el header, sería la solución.

Gracias a todos.

Rolando :D