Page 1 of 1

TXBrowse: Asociar Indices a los headers de las columnas

Posted: Fri Sep 07, 2007 9:50 am
by Carlos Mora
Hola compañeros,

estoy cambiando un TSBrowse por un TXBrowse. En la configuración anterior tenía el TSBrowse definido de forma tal que al hacer dobleclick en una columna se cambiaba a un índice asociado, como en

Code: Select all

         ADD COLUMN TO OBROWSE HEADER  "CONCEPTO" ;
            ORDER "CONCEPTO"
Como se hace lo mismo en TXBrowse? He estado buscando pero no encuentro nada relacionado en el código, aunque me parece haberlo visto en algun lado.

Saludos,

Carlos.

Posted: Fri Sep 07, 2007 12:58 pm
by Kleyber
Hola Carlos,

Usas asi:

Code: Select all

   oBrw                  := TXBrowse():New( oDlg1 )
   oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLROW
   oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY
   oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
   oBrw:bSeek            := {|c| DbSeek( Upper( c ) ) }
Y en las columnas, yo defino asi:

Code: Select all

   oCol := oBrw:AddCol()
   oCol:cHeader       := "Código"
   oCol:bStrData      := { || IF( SELECT(oBrw:cAlias) > 0,PRO->codi,"")  }
   oCol:nDataStrAlign := AL_LEFT
   oCol:nHeadStrAlign := AL_LEFT
   oCol:nWidth        := 82
   oCol:bLClickHeader := {|| Checa_Indices(1,1,oBrw,"PRO") }
   oCol:AddBmpFile( "BLANK.BMP", .T. )
   oCol:AddBmpFile( "CLIP.BMP", .T. )
   oCol:nHeadBmpNo := 2

   oCol := oBrw:AddCol()
   oCol:cHeader       := "Descrição"
   oCol:bStrData      := { || IF( SELECT(oBrw:cAlias) > 0,PRO->nome,"")  }
   oCol:nDataStrAlign := AL_LEFT
   oCol:nHeadStrAlign := AL_LEFT
   oCol:nWidth        := 302
   oCol:bLClickHeader := {|| Checa_Indices(2,2,oBrw,"PRO") }
   oCol:AddBmpFile( "BLANK.BMP", .T. )
   oCol:AddBmpFile( "CLIP.BMP", .T. )
   oCol:nHeadBmpNo := 1
Donde la función Checa_Indices() es solo para cambiar el bitmap que aparece en el header, asi:

Code: Select all

//----------------------------------------------------------------------------//
Function Checa_Indices( nX, nZ, oBrwX, xAlias )
// Verificação do set order e dos headers
// nX - Índice
// nZ - Posição da coluna no browse
// oBrwX - Browse
// xAlias - Tabela a ser atualizada
//----------------------------------------------------------------------------//

for nA := 1 to len( oBrwX:aCols )
    oCol := oBrwX:aCols[ nA ]
    if oCol:nHeadBmpNo > 0
       if nA = nZ
          oCol:nHeadBmpNo := 2
       else
          oCol:nHeadBmpNo := 1
       endif
    endif
next
sele (xAlias)
DbSetOrder(nX)
oBrwX:Refresh()
return nil
Espero que te ayude.

Saludos,

Posted: Fri Sep 07, 2007 1:09 pm
by Carlos Mora
Hola Kleyber

muchas gracias por el código. El unico inconveniente es que TXBrowse no se refesca bien si por ejemplo está en el renglon 4 y con el nuevo indice estamos en la clave 2. Y hacer un Refresh(.T.) hace un gotop que no es lo que quiero.
Hay que tocar el refresh antes para que pivotee de manera correcta sobre el registro actual.

Un saludo,

Carlos.