Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Remover Filtro Olá a todos, gostaria de remover um filtro aplicado em uma datagrid que é adicionado quando eu mando localizar algo. Tudo está funcionando sem problemas... mas o comportamento atual é que o filtro só é removido se eu apagar o conteúdo da caixa de texto "search" e mandar localizar novamente. Gostaria de alterar esse comportamento e colocar botão (action) para fazer o datagrid voltar a f...
G
Remover Filtro  
Olá a todos,
gostaria de remover um filtro aplicado em uma datagrid que é adicionado quando eu mando localizar algo. Tudo está funcionando sem problemas... mas o comportamento atual é que o filtro só é removido se eu apagar o conteúdo da caixa de texto "search" e mandar localizar novamente.

Gostaria de alterar esse comportamento e colocar botão (action) para fazer o datagrid voltar a ficar preenchido e o texto da caixa search sumir.

Desde já fico agradecido.


Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


IF

Gercino, vc vai ter que criar uma function para limpar as sessões que fazem parte da sua consulta, não sei quais os campos e nem a estrutura da sua Datagrid, mas funciona mais ou menos assim:
 
  1. <?php
  2. $this->form->clear() // function que limpa o form
  3. TSession::setValue('nome_do_seu_campo_session', NULL); // Aqui vc limpa os seus campos que foram criados com o TSession
  4. $this->onReload();
  5. ?>
G

Olá Ivan, muito obrigado pela resposta. :-)
Sua dica me fez entender um pouco mais o funcionamento do framework.

De primeira meu código não funcionou, pois não informei o nome correto da variável de sessão.
Então corri atrás... e baixei o código da aplicação Library (disponível para download).
Abri o código do formulário Autores (AuthorList.class.php) pois é um formulário simples e se parece com o que estou fazendo aqui.
Encontrei uma pista do que eu queria...

 
  1. <?php
  2. // create the form fields
  3. $filter = new TEntry('name');
  4. $filter->setValue(TSession::getValue('Author_name'));
  5. ?>


Neste ponto eu avancei um pouco... e na função que criei... usei sua dica.

 
  1. <?php
  2. public function onClearFilter($param) {
  3. TSession::setValue('Acessorio_nome', NULL);
  4. $this->onReload();
  5. }
  6. ?>


"Acessorio_nome" é o nome da variável de sessão que eu estava procurando... e funcionou! O campo no formulário limpou.

Mas nem tudo são flores :-)

Se eu escrever na caixa de texto e clicar em limpar... funciona
Se eu escrever na caixa de texto e mandar localizar.... e depois clicar em limpar... não funciona
A ação localizar está de alguma maneira alterando as coisas na sessão.
Já deu para entender que o framework faz muitas coisas por trás dos panos... tais como criar automaticamente as variáveis de sessão, já que não fui eu. :-)

Só por curiosidade... eu só consigo limpar a caixa de texto (depois que eu clico em localizar) se eu clicar duas vezes no botão limpar.

Bem... vou continuar pesquisando aqui... e se eu conseguir avançar... posto aqui.

Vlw Ivan.
IF

Bom dia Gercino, que bom que vc conseguiu. Coloque o código abaixo na sua function onClearFilter para limpar o seu form sem precisar clicar duas vezes.

 
  1. <?php
  2. $this->form->clear()
  3. ?>


Abraço
IF

Ps. insira esse código antes do onReload();
G

Olá Ivan! obrigado por mais uma dica sua.

Finalmente consegui fazer tudo funcionar 100% do jeito que eu queria. :-)
Nas pesquisas... acabei caindo nessa página:

https://www.adianti.com.br/forum/pt/view_1188?page-navigation-altera-filtro-na-t

Nesta página o Pablo indica um link

www.adianti.com.br/framework_files/tutor/index.php?class=CompleteDat

Nesse link... eu vi o código do formulário... e copiei fazendo pequenas alterações.
No final fiquei tique implementar 3 funções:

> onSearch() <== copiei do exemplo
> onClearFilter() <== eu criei
> onReload() <== copiei do exemplo

abaixo os trechos que alterei

 
  1. <?php
  2. function onSearch() {
  3. // get the search form data
  4. $data = $this->form->getData();
  5. // check if the user has filled the form
  6. if (isset($data->nome))
  7. {
  8. // creates a filter using what the user has typed
  9. if (TSession::getValue( 'limpar_formulario' ) === TRUE ) {
  10. $data->nome = '';
  11. $filter = NULL;
  12. TSession::setValue( 'limpar_formulario', FALSE );
  13. }
  14. else {
  15. $filter = new TFilter('nome', 'like', "%{$data->nome}%");
  16. }
  17. // stores the filter in the session
  18. TSession::setValue('Acessorio_filter', $filter);
  19. TSession::setValue('Acessorio_nome', $data->nome);
  20. // fill the form with data again
  21. $this->form->setData($data);
  22. }
  23. ...
  24. ?>


 
  1. <?php
  2. public function onClearFilter($param) {
  3. TSession::setValue( 'limpar_formulario', TRUE );
  4. $this->onSearch();
  5. }
  6. ?>


Na função onReload() eu praticamente não mudei nada (troquei uns dois ou três nomes)... ficando igual ao código que copiei.

Agora está tudo funcionando perfeitamente!

Vlw grande Ivan!