Lançado Adianti Framework 8.1!
Clique aqui para saber mais
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.     
  16.     public function __construct()
  17.     {
  18.         parent::__construct();
  19.         
  20.         // creates one datagrid
  21.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  22.         $this->datagrid->width '100%';
  23.         $this->datagrid->datatable 'true';
  24.         // add the columns
  25.         $this->datagrid->addColumn( new TDataGridColumn('code',    'Code',    'center''10%') );
  26.         $this->datagrid->addColumn( new TDataGridColumn('date',    'Date',    'center''10%') );
  27.         $this->datagrid->addColumn( new TDataGridColumn('name',    'Name',    'left',   '30%') );
  28.         $this->datagrid->addColumn( new TDataGridColumn('city',    'City',    'left',   '30%') );
  29.         $this->datagrid->addColumn( new TDataGridColumn('state',   'State',   'left',   '30%') );
  30.         
  31.         $action1 = new TDataGridAction([$this'onView'],   ['code'=>'{code}',  'name' => '{name}'] );
  32.         $this->datagrid->addAction($action1'View''fa:search blue');
  33.         
  34.         // creates the datagrid model
  35.         $this->datagrid->createModel();
  36.         
  37.         // search box
  38.         $input_search = new TEntry('input_search');
  39.         $input_search->placeholder _t('Search');
  40.         $input_search->setSize('100%');
  41.         
  42.         // enable fuse search by column name
  43.         $this->datagrid->enableSearch($input_search'code, date, name, city, state');
  44.         
  45.         $panel = new TPanelGroup_t('Datagrid search') );
  46.         $panel->addHeaderWidget($input_search);
  47.         $panel->add($this->datagrid)->style 'overflow-x:auto';
  48.         $panel->addFooter('footer');
  49.         
  50.         // wrap the page content using vertical box
  51.         $vbox = new TVBox;
  52.         $vbox->style 'width: 100%';
  53.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  54.         $vbox->add($panel);
  55.         parent::add($vbox);
  56.     }
  57.     
  58.     /**
  59.      * Load the data into the datagrid
  60.      */
  61.     function onReload()
  62.     {
  63.         $this->datagrid->clear();
  64.         
  65.         // add an regular object to the datagrid
  66.         $item = new StdClass;
  67.         $item->code   '1';
  68.         $item->date   date('d/m/Y'strtotime('+10 days'));
  69.         $item->name   'Aluguel contrato 0035/2020 - 1/24';
  70.         $item->city   'Memphis';
  71.         $item->state  'Tennessee (US)';
  72.         $this->datagrid->addItem($item);
  73.         
  74.         // add an regular object to the datagrid
  75.         $item = new StdClass;
  76.         $item->code   '2';
  77.         $item->date   date('d/m/Y'strtotime('+20 days'));
  78.         $item->name   'Aluguel contrato 0036/2020 - 1/25';
  79.         $item->city   'Ripley';
  80.         $item->state  'Surrey (UK)';
  81.         $this->datagrid->addItem($item);
  82.         
  83.         // add an regular object to the datagrid
  84.         $item = new StdClass;
  85.         $item->code   '3';
  86.         $item->date   date('d/m/Y'strtotime('+30 days'));
  87.         $item->name   'Aluguel contrato 0037/2020 - 1/26';
  88.         $item->city   'Itta Bena';
  89.         $item->state  'Mississippi (US)';
  90.         $this->datagrid->addItem($item);
  91.         
  92.         // add an regular object to the datagrid
  93.         $item = new StdClass;
  94.         $item->code   '4';
  95.         $item->date   date('d/m/Y'strtotime('+40 days'));
  96.         $item->name   'Aluguel contrato 0038/2020 - 1/27';
  97.         $item->city   'Port Arthur';
  98.         $item->state  'Texas (US)';
  99.         $this->datagrid->addItem($item);
  100.     }
  101.     
  102.     /**
  103.      * Executed when the user clicks at the view button
  104.      */
  105.     public static function onView($param)
  106.     {
  107.         // get the parameter and shows the message
  108.         $code $param['code'];
  109.         $name $param['name'];
  110.         new TMessage('info'"The code is: <b>$code</b> <br> The name is : <b>$name</b>");
  111.     }
  112.     
  113.     /**
  114.      * shows the page
  115.      */
  116.     function show()
  117.     {
  118.         $this->onReload();
  119.         parent::show();
  120.     }
  121. }
  122. ?>