Busca Rapida no Grid - não consigo fazer funcionar Bom dia! Estou tentando fazer funcionar o novo recurso de busca rapida a partir do grid, porém não está funcionando. Segue abaixo meu código, caso alguém puder me ajudar, agradeço. $this->datagrid->createModel(); //Busca rapida $input_search = new TEntry('input_search'); $input_search->placeholder = 'Pesquisar'; $input_search->setSize('100%'); //Habili...
VP
Busca Rapida no Grid - não consigo fazer funcionar  
Bom dia!

Estou tentando fazer funcionar o novo recurso de busca rapida a partir do grid, porém não está funcionando.
Segue abaixo meu código, caso alguém puder me ajudar, agradeço.

$this->datagrid->createModel(); //Busca rapida $input_search = new TEntry('input_search'); $input_search->placeholder = 'Pesquisar'; $input_search->setSize('100%'); //Habilitar busca rápida $this->datagrid->enableSearch($input_search, 'cidade_nome, cidade_ibge'); // creates the page navigation $this->pageNavigation = new TPageNavigation; $this->pageNavigation->enableCounters(); $this->pageNavigation->setAction(new TAction(array($this, 'onReload'))); $this->pageNavigation->setWidth($this->datagrid->getWidth()); $panel = new TPanelGroup; $panel->add($this->datagrid); $panel->addHeaderWidget($input_search); $panel->getBody()->class .= ' table-responsive';

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 (6)


MG

Se estiver tentando utilizar numa grid com paginação, não vai rolar.

Livor versão 10, capítulo 4.6.10 Datagrid com busca rápida:
Porém, em alguns casos específicos nos quais exibimos todos os registros disponíveis
em tela, é útil podermos realizar uma busca em tela (somente dos registros visíveis). Este
exemplo demonstra como criar um campo de busca para localizarmos no conteúdo da
datagrid visível em tela.

Ou seja, só funciona quanto a lista (datagrid) contém todos os registros que você deseja filtrar....

Se precisar buscar numa lista no BD, utilize a onSearch + onReload ou outra forma que for melhor para o seu caso.....
VP

Olá Marcelo,

Esse meu exemplo possui a paginação, mas tb tinha retirado ela, mas mesmo assim ele não funcionou, por isso achei estranho.

atc

Valdiney

MG

Valdiney
Tenho um exemplo de um tabela pequena implementado e funciona bem.
Dá um revisada no código em especial no nome dos atributos.
Eles devem ser exatamente iguais aos que estão na datagrid.
VP

Ok, Marcelo
se puder mandar no meu email...segue abaixo.

sistemas.vlp@gmail.com

obrigado!

Valdiney
DC

Depois de quebrar a cabeça o dia inteiro hoje, acabei descobrindo um bug nessa funcionalidade. Caso a ultima coluna da grid contenha apenas valores null toda a pesquisa para de funcionar... nao consegui descobrir porque. Descobri isso substituindo todos os valores null ou vazios por um valor qualquer, assim a busca passou a funcionar como no exemplo. Para funcionar basta que a ultima coluna tenha algum valor em alguma linha.
BJ

Olá pessoal!

Em um projeto que estou desenvolvendo observei também funcionamento errático, como por exemplo, quando em uma coluna de data eu uso a função TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy'); para formatar a data a busca rápida não funciona naquela coluna, quando eu removo a formatação e a data retorna com o formato do banco, funciona normal.

Para efeito de testes, fiz umas alterações na classe DatagridSearchView do Tutor e também observei um bug na busca rápida, ela não retorna 1/24, 1/25, 1/26 ou 1/27, no entanto 35/20, 36/20, 37/20, 38/20 retorna sem problema, o detalhe é que todas as informações estão na mesma coluna "name".

Alguém pode explica o motivo deste comportamento? Isso é um bug mesmo? Ou estou fazendo algo de errado?

Grato.

Segue o código de exemplo:

 
  1. <?php
  2. /**
  3. * DatagridSearchView
  4. *
  5. * @version 1.0
  6. * @package samples
  7. * @subpackage tutor
  8. * @author Pablo Dall'Oglio
  9. * @copyright Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10. * @license http://www.adianti.com.br/framework-license
  11. */
  12. class DatagridSearchView extends TPage
  13. {
  14. private $datagrid;
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. // creates one datagrid
  19. $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  20. $this->datagrid->width = '100%';
  21. $this->datagrid->datatable = 'true';
  22. // add the columns
  23. $this->datagrid->addColumn( new TDataGridColumn('code', 'Code', 'center', '10%') );
  24. $this->datagrid->addColumn( new TDataGridColumn('date', 'Date', 'center', '10%') );
  25. $this->datagrid->addColumn( new TDataGridColumn('name', 'Name', 'left', '30%') );
  26. $this->datagrid->addColumn( new TDataGridColumn('city', 'City', 'left', '30%') );
  27. $this->datagrid->addColumn( new TDataGridColumn('state', 'State', 'left', '30%') );
  28. $action1 = new TDataGridAction([$this, 'onView'], ['code'=>'{code}', 'name' => '{name}'] );
  29. $this->datagrid->addAction($action1, 'View', 'fa:search blue');
  30. // creates the datagrid model
  31. $this->datagrid->createModel();
  32. // search box
  33. $input_search = new TEntry('input_search');
  34. $input_search->placeholder = _t('Search');
  35. $input_search->setSize('100%');
  36. // enable fuse search by column name
  37. $this->datagrid->enableSearch($input_search, 'code, date, name, city, state');
  38. $panel = new TPanelGroup( _t('Datagrid search') );
  39. $panel->addHeaderWidget($input_search);
  40. $panel->add($this->datagrid)->style = 'overflow-x:auto';
  41. $panel->addFooter('footer');
  42. // wrap the page content using vertical box
  43. $vbox = new TVBox;
  44. $vbox->style = 'width: 100%';
  45. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  46. $vbox->add($panel);
  47. parent::add($vbox);
  48. }
  49. /**
  50. * Load the data into the datagrid
  51. */
  52. function onReload()
  53. {
  54. $this->datagrid->clear();
  55. // add an regular object to the datagrid
  56. $item = new StdClass;
  57. $item->code = '1';
  58. $item->date = date('d/m/Y', strtotime('+10 days'));
  59. $item->name = 'Aluguel contrato 0035/2020 - 1/24';
  60. $item->city = 'Memphis';
  61. $item->state = 'Tennessee (US)';
  62. $this->datagrid->addItem($item);
  63. // add an regular object to the datagrid
  64. $item = new StdClass;
  65. $item->code = '2';
  66. $item->date = date('d/m/Y', strtotime('+20 days'));
  67. $item->name = 'Aluguel contrato 0036/2020 - 1/25';
  68. $item->city = 'Ripley';
  69. $item->state = 'Surrey (UK)';
  70. $this->datagrid->addItem($item);
  71. // add an regular object to the datagrid
  72. $item = new StdClass;
  73. $item->code = '3';
  74. $item->date = date('d/m/Y', strtotime('+30 days'));
  75. $item->name = 'Aluguel contrato 0037/2020 - 1/26';
  76. $item->city = 'Itta Bena';
  77. $item->state = 'Mississippi (US)';
  78. $this->datagrid->addItem($item);
  79. // add an regular object to the datagrid
  80. $item = new StdClass;
  81. $item->code = '4';
  82. $item->date = date('d/m/Y', strtotime('+40 days'));
  83. $item->name = 'Aluguel contrato 0038/2020 - 1/27';
  84. $item->city = 'Port Arthur';
  85. $item->state = 'Texas (US)';
  86. $this->datagrid->addItem($item);
  87. }
  88. /**
  89. * Executed when the user clicks at the view button
  90. */
  91. public static function onView($param)
  92. {
  93. // get the parameter and shows the message
  94. $code = $param['code'];
  95. $name = $param['name'];
  96. new TMessage('info', "The code is: <b>$code</b> <br> The name is : <b>$name</b>");
  97. }
  98. /**
  99. * shows the page
  100. */
  101. function show()
  102. {
  103. $this->onReload();
  104. parent::show();
  105. }
  106. }
  107. ?>