xBrowse - Ayuda para ordenar

Post Reply
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

xBrowse - Ayuda para ordenar

Post 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
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: xBrowse - Ayuda para ordenar

Post by jrestojeda »

Hola amigo, prueba lo siguiente:

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

Code: Select all

oBrow:aCols[1]:cSortOrder   :="PROVEED1"
 
Espero te sirva.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: xBrowse - Ayuda para ordenar

Post 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
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: xBrowse - Ayuda para ordenar

Post 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
Saludos,

Adhemar C.
RodMG
Posts: 31
Joined: Thu Jan 26, 2006 5:53 pm

Re: xBrowse - Ayuda para ordenar

Post 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
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: xBrowse - Ayuda para ordenar

Post 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
Post Reply