FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Txbrowse Column Sort Indicator
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Txbrowse Column Sort Indicator
Posted: Thu Nov 17, 2022 02:33 PM
Hello to all friends
There's a way to click on the Xbrowse column, it changes the sorting arrow according to the image

Arrow up and down


OR


CODE SAMPLE
Code (fw): Select all Collapse
oCol := oDB_forneced_SQL:AddCol()
oCol:bStrData  := { || STRZERO(forneced->CODFOR,06,0) }
oCol:cHeader   := "Código"
oCol:cFooter   := " "
oCol:nDataStrAlign := AL_LEFT
oCol:nHeadStrAlign := AL_LEFT
oCol:bLClickHeader := {|r,c,f,o| ( oDB_forneced_SQL:cFilterFld := 'CODFOR', PROCURA_FORNECED_SQL(cOrder,'CODFOR',1)    )}
oCol:cSortOrder := 'CODFOR'
oDB_forneced_SQL:aCols[01]:oHeaderFont := O_F_90_GRAUS


If you want to see the function
Code (fw): Select all Collapse
*=================================================================================
/// Pesquisa no Banco de dados Dependedo da Chave escolhida
///============================================================================= 
FUNCTION PROCURA_FORNECED_SQL(v_Ordenacao,v_Campo_Ordenar,v_Num_Col)
    DEFAULT v_Ordenacao         :="A"
    DEFAULT v_Campo_Ordenar     :="NOMFOR"
    DEFAULT v_Num_Col           :="1"
    IF v_Ordenacao = 'A'
        cOrder := 'D'
    ELSE
        cOrder := 'A'
    ENDIF
    *----------------------------------------------------------------------------
    IF SELECT("forneced") != 0
        forneced->(DbCloseArea())
    ENDIF       
    cQuery := ' SELECT  * from forneced '
    cQuery += ' ORDER BY ' + ALLTRIM(v_Campo_Ordenar)  + IF(v_Ordenacao='A',' DESC',' ASC')
    use sql cQuery alias "forneced" new via 'MYSQL'
    forneced->( DbGoTop())
    oDB_forneced_SQL:oHeaderFonts                               := O_F_DLG
    oDB_forneced_SQL:oCol(  (oDB_forneced_SQL:nColSel) ):oHeaderFont    := O_F_GET
    oDB_forneced_SQL:nColSel                                    := (v_Num_Col)   
    oDB_forneced_SQL        :GoTop()
    oDB_forneced_SQL        :Refresh()
    oDB_forneced_SQL        : SetFocus()
Return(.t.)

Example is in Asc order (notice the little arrow)

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Txbrowse Column Sort Indicator
Posted: Thu Nov 17, 2022 04:35 PM
Try with
Code (fw): Select all Collapse
   oBrw:RefreshHeaders()
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Re: Txbrowse Column Sort Indicator
Posted: Thu Nov 17, 2022 05:28 PM
Hi, thanks for replying, unfortunately it didn't work

oDBx_Fornecedor :RefreshHeaders()

look
Code (fw): Select all Collapse
FUNCTION PROCURA_FORNECED_SQL(v_Ordenacao,v_Campo_Ordenar,v_Num_Col)
 
    DEFAULT v_Ordenacao         :="A"
    DEFAULT v_Campo_Ordenar     :="NOMFOR"
    DEFAULT v_Num_Col           := 2
    IF v_Ordenacao = 'A'
        cOrder := 'D'
    ELSE
        cOrder := 'A'
    ENDIF      
    *----------------------------------------------------------------------------
    IF SELECT("forneced") != 0
        forneced->(DbCloseArea())
    ENDIF       
    cQuery := ' SELECT  * from forneced '
    cQuery += ' ORDER BY ' + ALLTRIM(v_Campo_Ordenar)  + IF(v_Ordenacao='A',' DESC',' ASC')
    use sql cQuery alias "forneced" new via 'MYSQL'
    forneced->( DbGoTop())
    oDBx_Fornecedor:oHeaderFonts                            := O_F_DLG
    oDBx_Fornecedor:nColSel                             := (v_Num_Col)   
    oDBx_Fornecedor:oCol(  (v_Num_Col) ):oHeaderFont:= O_F_GET
    oDBx_Fornecedor     :GoTop()

    oDBx_Fornecedor     :RefreshHeaders()

    oDBx_Fornecedor     :Refresh()
    oDBx_Fornecedor         : SetFocus()             
Return(.t.)
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Txbrowse Column Sort Indicator
Posted: Thu Nov 17, 2022 06:02 PM
Márcio, Veja se ajuda:

http://forums.fivetechsupport.com/viewtopic.php?f=3&t=40363

Regrads, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Re: Txbrowse Column Sort Indicator
Posted: Thu Nov 17, 2022 07:42 PM

not working

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Txbrowse Column Sort Indicator
Posted: Fri Nov 18, 2022 03:09 AM
Set the sorted column's data cOrder := "A" or "D" depending on Ascending or Descending sort and then calll RefreshHeaders
Code (fw): Select all Collapse
oBrw:cOrders := ""
oCol:cOrder := "A"
oBrw:RefreshHeaders()
Regards



G. N. Rao.

Hyderabad, India
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Re: Txbrowse Column Sort Indicator
Posted: Fri Nov 18, 2022 09:53 AM
Thanks for the answer
It worked almost 100%, but it is updating all the columns.
I need only the Selected Column to be updated.
See the following images

Asc



Desc

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Txbrowse Column Sort Indicator
Posted: Fri Nov 18, 2022 04:28 PM

You should set

oCol:cOrder := "A"

for the SORTED COLUMN ONLY.

You have set this for all columns.

Regards



G. N. Rao.

Hyderabad, India
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Re: Txbrowse Column Sort Indicator
Posted: Sat Nov 19, 2022 11:12 AM
Thank you very much
But I couldn't understand where to implement
I attach the complete function, in case it is easier to help me

Sorry for not understanding

Code (fw): Select all Collapse
*-------------------------------------------------------------------------------
* Localiza Cadastro de fornecedores
*-------------------------------------------------------------------------------
FUNCTION LOCALIZA_fornecedORES_SQL()
    Cursor("SQL")
    X                       := .T.
    PROCURA_PESQUISA            := SPACE(40)
    cOrder                      := 'A'  
    T_ID_VEICULO                :=  0
    T_CAMPO_ORDENAR         :='NOMFOR'  
    uRetCol                     := 1        
    *============================================================================
    TB_bairros()
    *----------------------------------------------------------------------------
    TB_forneced()
    *----------------------------------------------------------------------------  
    IF SELECT("forneced") != 0
        forneced->(DbCloseArea())
    ENDIF       
    cQuery:=                ' SELECT  * from forneced'
    cQuery:= cQuery + ' ORDER BY CODFOR '
    use sql cQuery alias "forneced" new via 'MYSQL'
    forneced->(DbGoTop())
    *----------------------------------------------------------------------------   
    DEFINE DIALOG oDlg_Pesq_Fornecedor RESOURCE "PESQUISA_SQL_INCREMENTAL" TITLE "...:: Pesquisa ::..." Font O_F_DLG 
    oDlg_Pesq_Fornecedor:lHelpIcon:=.F. 
    T_TXT_DIALOGO   := ' Pesquisa'
    REDEFINE SAY oT_TXT_DIALOGO                     var T_TXT_DIALOGO     ID 4052           OF oDlg_Pesq_Fornecedor  FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT  Update 
    T_TXT_DIALOGO2  := ' '
    REDEFINE SAY oT_TXT_DIALOGO2                        var T_TXT_DIALOGO2  ID 4001             OF oDlg_Pesq_Fornecedor  FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT  Update 
    *----------------------------------------------------------------------------      
    oDBx_Fornecedor                                 := TXBrowse():New( oDlg_Pesq_Fornecedor )
    oDBx_Fornecedor:lAutoSort                   :=.t.
    oDBx_Fornecedor:cAlias                      := "forneced"
    oDBx_Fornecedor:bKeyDown                    :={|nKey|  if(nkey=13,(     T_CODIGO_forneced   := forneced->CODFOR, oDlg_Pesq_Fornecedor:End() ),) }
    oDBx_Fornecedor:bChange                     :={||                           T_CODIGO_forneced   := forneced->CODFOR     }
    oDBx_Fornecedor:bLDblClick                  :={||                           T_CODIGO_forneced   := forneced->CODFOR, oDlg_Pesq_Fornecedor:End() }
    oDBx_Fornecedor:lColDividerComplete     := .F.
    oDBx_Fornecedor:lFooter                 := .T.
    oDBx_Fornecedor:lRecordSelector         := .T.  
    oDBx_Fornecedor:nHeaderLines            := 2
    oDBx_Fornecedor:nDataLines              := 2
    oDBx_Fornecedor:bClrStd                     := {|| { M->COR_LETRAS_GRID, IIF(((oDBx_Fornecedor:cAlias)->(ORDKEYNO()))%2==0, COR_1_bClrStd , COR_2_bClrStd  )}}
    oDBx_Fornecedor:bClrSelFocus                := {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus  } }         
    oDBx_Fornecedor:bClrRowFocus                := {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus   } }
    oDBx_Fornecedor:nColDividerStyle        := 4
    oDBx_Fornecedor:nRowDividerStyle        := 4
    oDBx_Fornecedor:nMarqueeStyle           := 4
    oDBx_Fornecedor:nFooterLines            := 1
    oDBx_Fornecedor:lAllowColSwapping       := .T.                                 //  Click no header (.f.)Trava
    oDBx_Fornecedor:lAllowRowSizing         := .T.                                 //  Nao move as Linhas (nao sei) 
    oDBx_Fornecedor:l2007                       := M->ESTILO_l2007 
    oDBx_Fornecedor:lColChangeNotify        := .T.  &&&&& gerar evento por coluna
    oDBx_Fornecedor:lAllowRowSizing         := .T. 
    oDBx_Fornecedor:lSeekWild               := .T. 
    oDBx_Fornecedor:lIncrFilter                 := .T. // Liga o Filtro incremental     
    *----------------------------------------------------------------------------   
    oDBx_Fornecedor:nColSel                     := 2   // Jogar o Foco na Segunda coluna
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || STRZERO(forneced->CODFOR,06,0) }
    oCol:cHeader        := "Código"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| ( oDBx_Fornecedor:cFilterFld := 'CODFOR', PROCURA_FORNECED_SQL(cOrder,'CODFOR',oDBx_Fornecedor:MouseColPos( c ) )    )}
   oCol:cSortOrder      := 'CODFOR'
    oCol:oHeaderFont        := O_F_90_GRAUS
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || forneced->NOMFOR }
    oCol:cHeader        := "Razão"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| ( oDBx_Fornecedor:cFilterFld := 'NOMFOR', PROCURA_FORNECED_SQL(cOrder,'NOMFOR', oDBx_Fornecedor:MouseColPos( c )  )  )}
   oCol:cSortOrder      := 'NOMFOR'
   oCol:oHeaderFont     := O_F_GET
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || forneced->FANTASIA }
    oCol:cHeader        := "Fantasia"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'FANTASIA', PROCURA_FORNECED_SQL(cOrder,'FANTASIA',oDBx_Fornecedor:MouseColPos( c ) )    )}
   oCol:cSortOrder      := 'FANTASIA'
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || forneced->ENDFOR }
    oCol:cHeader        := "Endereço"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| ( oDBx_Fornecedor:cFilterFld :=  'ENDFOR', PROCURA_FORNECED_SQL(cOrder,'ENDFOR',oDBx_Fornecedor:MouseColPos( c ) )    )}
   oCol:cSortOrder      := 'ENDFOR'
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || forneced->BAIFOR }
    oCol:cHeader        := "Bairro"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'BAIFOR', PROCURA_FORNECED_SQL(cOrder,'BAIFOR',oDBx_Fornecedor:MouseColPos( c ) )   )}
   oCol:cSortOrder      := 'BAIFOR'
    *----------------------------------------------------------------------------   
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || forneced->CEPFOR }
    oCol:cHeader        := "Cep"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'CEPFOR', PROCURA_FORNECED_SQL(cOrder,'CEPFOR',oDBx_Fornecedor:MouseColPos( c ) )   )}
   oCol:cSortOrder      := 'CEPFOR'
    *---------------------------------------------------------------------------- 
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { ||  forneced->CGCFOR }
    oCol:cHeader        := "Cnpj/Cpf"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'CGCFOR', PROCURA_FORNECED_SQL(cOrder,'CGCFOR',oDBx_Fornecedor:MouseColPos( c ) )   )}
   oCol:cSortOrder      := 'CGCFOR'
    *---------------------------------------------------------------------------- 
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || (forneced->INSFOR)   }
    oCol:cHeader        := "Insc."
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'INSFOR', PROCURA_FORNECED_SQL(cOrder,'INSFOR',oDBx_Fornecedor:MouseColPos( c ) )  )}
   oCol:cSortOrder      := 'INSFOR'
    *---------------------------------------------------------------------------- 
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || (forneced->FONFOR)   }
    oCol:cHeader        := "Tel."
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'FONFOR', PROCURA_FORNECED_SQL(cOrder,'FONFOR',oDBx_Fornecedor:MouseColPos( c ) )    )}
   oCol:cSortOrder      := 'FONFOR'
    *---------------------------------------------------------------------------- 
    oCol                        := oDBx_Fornecedor:AddCol()
    oCol:bStrData       := { || (forneced->FAXFOR)   }
    oCol:cHeader        := "Fax"
    oCol:cFooter        := " "
    oCol:nDataStrAlign  := AL_LEFT
    oCol:nHeadStrAlign  := AL_LEFT
   oCol:bLClickHeader   := {|r,c,f,o| (  oDBx_Fornecedor:cFilterFld :=  'FAXFOR', PROCURA_FORNECED_SQL(cOrder,'FAXFOR',oDBx_Fornecedor:MouseColPos( c ) )    )}
   oCol:cSortOrder      := 'FAXFOR'
   *----------------------------------------------------------------------------
    oDBx_Fornecedor:CreateFromResource(4015)
    *----------------------------------------------------------------------------
    WITH OBJECT oDBx_Fornecedor
       :SetGroupHeader( "Dados Básicos"    ,    01, 02, O_F_CAB_XBROWSE)
       :SetGroupHeader( "Dados Postais"     ,    03, 05, O_F_CAB_XBROWSE)
      :cFilterFld       := "NOMFOR"
      :bKeyDown         := { |nKey| If( nKey == VK_RETURN, (  uRet := oDBx_Fornecedor:oCol( uRetCol ):Value, oDlg_Pesq_Fornecedor:End() ), nil ) }
      :bKeyChar         := { |nKey| If( nKey == VK_ESCAPE, ( oDBx_Fornecedor:Seek( "" ), oDlg_Pesq_Fornecedor:End() ), nil ) }
      :bLDClickDatas    := { || uRet := oDBx_Fornecedor:oCol( uRetCol ):Value, oDlg_Pesq_Fornecedor :End() }  
      :AutoFit()
   END
   REDEFINE SAY oDBx_Fornecedor:oSeek var oDBx_Fornecedor:cSeek                     ID 4002  PICTURE "@!" OF oDlg_Pesq_Fornecedor COLOR CLR_PRETO, CLR_VD_CALRO  FONT O_F_GET   
    *----------------------------------------------------------------------------
    REDEFINE BUTTONBMP oSair_pesquisa                                               ID 4008         OF oDlg_Pesq_Fornecedor ACTION ( oDlg_Pesq_Fornecedor:end()  ) BITMAP "#8019" PROMPT "&Fechar" TEXTRIGHT
    REDEFINE BUTTONBMP oExp_excel                                                       ID 4016         OF oDlg_Pesq_Fornecedor ACTION ( oDBx_Fornecedor:ToExcel(), PROCURA_FORNECED_SQL()  )   BITMAP (M->BTN_EXPORTA_EXCEL) PROMPT "Ex&cel" TEXTRIGHT
    *----------------------------------------------------------------------------
    oExp_excel              :   cToolTip := "Exportar para"+CRLF+"o Microsoft® Excel"
   *----------------------------------------------------------------------------
    oDBx_Fornecedor : SetFocus()
    ACTIVATE DIALOG oDlg_Pesq_Fornecedor CENTERED
 
RETURN .T.



*=================================================================================
/// Pesquisa no Banco de dados Dependedo da Chave escolhida
///============================================================================= 
FUNCTION PROCURA_FORNECED_SQL(v_Ordenacao,v_Campo_Ordenar,v_Num_Col)
    DEFAULT v_Ordenacao         :="A"
    DEFAULT v_Campo_Ordenar     :="NOMFOR"
    DEFAULT v_Num_Col           := 2
    IF v_Ordenacao = 'A'
        cOrder := 'D'
    ELSE
        cOrder := 'A'
    ENDIF      
    *----------------------------------------------------------------------------
    IF SELECT("forneced") != 0
        forneced->(DbCloseArea())
    ENDIF       
    cQuery := ' SELECT  * from forneced '
    cQuery += ' ORDER BY ' + ALLTRIM(v_Campo_Ordenar)  + IF(v_Ordenacao='A',' DESC',' ASC')
    use sql cQuery alias "forneced" new via 'MYSQL'
    forneced->( DbGoTop())
    oDBx_Fornecedor:oHeaderFonts                                := O_F_DLG
    oDBx_Fornecedor:nColSel                                 := (v_Num_Col)   
    oDBx_Fornecedor:oCol(  (v_Num_Col) ):oHeaderFont    := O_F_GET
    oDBx_Fornecedor                                             :GoTop()
    oDBx_Fornecedor                                             :Refresh()
    oCol:cOrder  := (cOrder)
    oDBx_Fornecedor:RefreshHeaders()    
    oDBx_Fornecedor         : SetFocus()             
Return(.t.)
Posts: 56
Joined: Tue Mar 23, 2010 12:53 PM
Re: Txbrowse Column Sort Indicator
Posted: Mon Nov 21, 2022 11:46 PM

Sorry, but I don't understand how to make it work.

Continue the discussion