busca no grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

busca no grid

Mensagem por marcelosantos »

Pessoal, saudações.

Estou com um form onde tenho um grid, aprendi montar esse grid e funciona.

porem preciso fazer uma busca por nome.

digito em um textbox o nome e quero posicionar no grid a linha que tem esse nome.

estou apanhando um pouco por não entender ainda o funcionamento completo do grid, dei um seek na tabela e sei que encontrou o registro, mas não consigo posicionar no grid.

Ainda não entendi bem a ligação do grid e o dbf.
Devo fazer a busca no próprio grid ou é no dbf mesmo?

por favor os colegas do fórum podem me ajudar ?

abraços

marcelo
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

busca no grid

Mensagem por Toledo »

Marcelo, dê mais detalhes de como você está montando o Grid, principalmente se está usando um Array para incluir os itens do Grid ou está usando diretamente o DBF.

Se for possível, cole o seu código do Grid aqui.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

busca no grid

Mensagem por marcelosantos »

Segue Toledo, obrigado.


Eu crio o grid depois tenho a função abre_txt_sped() onde seleciono o nome do arquivo com getfile() depois abro o dbf e com o do while preencho o grid com o campo do dbf. Depois tem um textbox onde digito uma palavra que gostaria de encontrar no grid.

O meu dbf tem apenas um campo onde armazeno um txt do sped.
A ideia é achar a linha que contem o string desejado na busca.

Conceitualmente é fácil, pra mim um at() no campo resolveria, a minha dificuldade é porque ainda não entendi direito como associar o grid ao dbf ou se a busca deve ser feita no grid mesmo e depois atualizar o dbf e por ai vai.

abraços, marcelo

Código: Selecionar todos


#include <hmg.ch>

Function ImportaSped()
     
   
     
     
    Define Window Imp_Sped at 0,0 WIDTH 1230 HEIGHT 660 TITLE "IMPORTA ARQUIVO SPED" modal
        @ 530,11 Label   LblPesquisa Value "Pesquisar" width 60
        @ 530,85 TextBox TxtPesquisa Width 600 On Change AcharReg()
        @ 568,10 BUTTON BtAbre_txt CAPTION "Abrir" WIDTH 100 ACTION(ABRE_TXT_SPED())
     
        Define Grid GridSped
            Parent Imp_Sped ; Row 10 ; Col 10
            Width 1195
            Height 500
            Headers {"Linhas do Sped"}
            Widths {1700}
            FontName "arial" && "Courier New"  
            FontSize 11 && 10
            FontBold .t.
            ToolTip "Arquivo texto do Sped - Efd - Sped Fiscal"
            On DblClick ChamaClick()       
        End Grid

      Define StatusBar 
         date
      End StatusBar
   End Window
    
    Imp_Sped.Center
    Activate Window Imp_Sped
    

FUNCTION ABRE_TXT_SPED()
LOCAL X 

    x:=GetFile({{"Arquivo *.TXT","*.txt"},{"Arquivo *.*","*.*"}},"Escolhendo o Arquivo","C:\prg\teste",.f.,.t.)
    
    select 1
    use arq.dbf
    zap
    Append from &x sdf
    dbgotop()
    
    
    do while .not. eof()
       add item {arq->linha} to GridSped of Imp_Sped
       dbskip()
    Enddo 
    
    Imp_sped.GridSped.setfocus
    /*
    if .not. empty(x)
        MsgInfo(x)
    endif*/
RETURN    


Function AcharReg()
   
   locate for At(Imp_Sped.txtPesquisa.Value, arq->linha) > 0
   
   IF FOUND()
          // add item {arq->linha} to Gindice of Imp_Sped
          // Imp_Sped.Gindice.refresh
          
          
   ENDIF
   

Return

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

busca no grid

Mensagem por Toledo »

Marcelo, tente o seguinte:

Código: Selecionar todos

Function AcharReg()
   DbGoTop()

   LOCATE FOR AT(RTRIM(Imp_Sped.txtPesquisa.Value), arq->linha) > 0

   DELETE ITEM ALL FROM GridSped OF Imp_Sped

   DO WHILE Found()
     ADD ITEM {arq->linha} TO GridSped OF Imp_Sped
     CONTINUE
   ENDDO

   Imp_Sped.GridSped.Refresh

Return Nil
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

busca no grid

Mensagem por Pablo César »

Toledo escreveu:Marcelo, dê mais detalhes de como você está montando o Grid, principalmente se está usando um Array para incluir os itens do Grid ou está usando diretamente o DBF.

Se for possível, cole o seu código do Grid aqui.
Fundamental isso !

O Grid é um ótimo componente, mas é complexo o seu uso. Há várias formas de utilizá-lo.

Mas acho que o colega Toledo, agora acertou porque conseguimos entender agora a forma que você está utilizando. Você está utilizando o seu grid com vetores, é mais laborioso mas é mais leve e rápido. Só que precisará você mesmo fazer o controle de navegação dentro do grid. O que é uma coisa laboriosa.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

busca no grid

Mensagem por marcelosantos »

Obrigado, Toledo, deu certo.

Obrigado Pablo
Responder