EL
Não consigo exibir o resultado do onSearch()
Olá pessoal,
Criei um DataGrid para listar os registros, funcionou perfeitamente a listagem e também o evento onEdit.
Agora preciso fazer funcionar o onSearch. Para quando o usuário precisar pesquisar por um registro, o mesmo seja carregado no DataGrid.
Códigos referentes ao DataGrid, onEdit, e onSearch:
Criei um DataGrid para listar os registros, funcionou perfeitamente a listagem e também o evento onEdit.
Agora preciso fazer funcionar o onSearch. Para quando o usuário precisar pesquisar por um registro, o mesmo seja carregado no DataGrid.
Códigos referentes ao DataGrid, onEdit, e onSearch:
- <?php
- class DisciplinaFormList extends TPage
- {
- private $form;
- private $datagrid;
- private $pageNavigation;
- private $loaded;
- /**
- * Construtor DisciplinaFormList
- */
- public function __construct()
- {
- parent::__construct();
- // Criando formulário com bootstrap
- $this->form = new BootstrapFormWrapper( new TQuickForm('form_pesquisar_disciplina'), 'form-vertical');
- // Cria o campo para o formulário/tabela
- $disciplina = new TEntry('dis_disciplina');
- // Adiciona o campo ao formulário
- $this->form->addQuickField('Disciplina:', $disciplina, 200);
- // define the form actions
- $pesquisa = $this->form->addQuickAction('Pesquisar', new TAction(array($this, 'onSearch')), 'fa:search fa-search');
- $pesquisa->class = 'btn btn-primary';
- $disciplina->setValue(TSession::getValue('descricao'));
- $painel1 = new TPanelGroup('Pesquisar Disciplina');
- $painel1->add($this->form);
- // Criando o DataGrid
- $this->datagrid = new BootstrapDatagridWrapper(new TQuickGrid);
- $this->datagrid->style = "width: 100%";
- //$this->datagrid->setHeight(230);
- $this->datagrid->addQuickColumn('ID', 'dis_id', 'right', 100);
- $this->datagrid->addQuickColumn('Disciplina', 'dis_descricao', 'left', 400);
- $this->datagrid->addQuickColumn('Carga Horária', 'dis_carga_horaria', 'left', 100);
- $this->datagrid->addQuickColumn('Ementa', 'dis_ementa', 'left', 400);
- // Ação editar no click do DataGrid
- $editar = new TDataGridAction(array('DisciplinaFormCadastro', 'onEdit'));
- $this->datagrid->addQuickAction('Editar', $editar, 'dis_id', 'fa:pencil fa-pencil');
- // Cria o model DataGrid
- $this->datagrid->createModel();
- // Cria um painel com o título do formulário
- $painel2 = new TPanelGroup('Lista de Disciplinas');
- //$panel->style="width: 100%";
- //$panel->add($this->form);
- $painel2->add($this->datagrid);
- $painel2->addFooter('Rodapé');
- // Cria a página de navegação
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- // Container principal da página e BreadCrumb
- $vbox = new TVBox;
- $vbox->style = 'width:100%';
- $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $vbox->add($painel1);
- $vbox->add($painel2);
- $vbox->add($this->pageNavigation);
- parent::add($vbox);
- }
- /**
- * method onSearch()
- * Register the filter in the session when the user performs a search
- */
- public function onSearch()
- {
- // get the search form data
- $data = $this->form->getData();
- // check if the user has filled the form
- if (isset($data->dis_disciplina)) {
- // creates a filter using what the user has typed
- $filter = new TFilter('dis_disciplina', 'like', "%{$data->dis_disciplina}%");
- // stores the filter in the session
- TSession::setValue('filtro', $filter);
- TSession::setValue('descricao', $data->dis_disciplina);
- // fill the form with data again
- $this->form->setData($data);
- }
- $param = array();
- $param['offset'] = 0;
- $param['first_page'] = 1;
- $this->onReload($param);
- }
- public function onReload($param = null)
- {
- try {
- TTransaction::open('sample');
- $repositorio = new TRepository('Disciplina');
- $limit = 10;
- $criterio = new TCriteria;
- $objetos = $repositorio->load($criterio);
- $this->datagrid->clear();
- if ($objetos) {
- foreach ($objetos as $obj) {
- $this->datagrid->addItem($obj);
- }
- }
- $count = $repositorio->count($criterio);
- $this->pageNavigation->setCount($count);
- $this->pageNavigation->setLimit($limit);
- TTransaction::close();
- } catch (Error $e) {
- new TMessage('Erro', $e->getMessage());
- }
- $this->loaded = true;
- }
- public function show()
- {
- if (!$this->loaded) {
- $this->onReload();
- }
- parent::show(); // TODO: Change the autogenerated stub
- }
- }
- ?>
No onSearch apos o getData() , coloca:
TSession::setValue('filtro', NULL); // isso vai limpar o filtro caso o campo $data->dis_disciplina fique em branco
No onReload tem que ter o seguinte:
Entre esse: $criterio = new TCriteria;
Coloca:
if (TSession::getValue('filtro')){
$criterio.Add(TSession::getValue('filtro'));
}
e esse: $objetos = $repositorio->load($criterio);
Eu acho q é isso.
Muito obrigado Leandro Coelho fiz as alterações e funcionou.