Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
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: ...
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:

 
  1. <?php
  2. class DisciplinaFormList extends TPage
  3. {
  4. private $form;
  5. private $datagrid;
  6. private $pageNavigation;
  7. private $loaded;
  8. /**
  9. * Construtor DisciplinaFormList
  10. */
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. // Criando formulário com bootstrap
  15. $this->form = new BootstrapFormWrapper( new TQuickForm('form_pesquisar_disciplina'), 'form-vertical');
  16. // Cria o campo para o formulário/tabela
  17. $disciplina = new TEntry('dis_disciplina');
  18. // Adiciona o campo ao formulário
  19. $this->form->addQuickField('Disciplina:', $disciplina, 200);
  20. // define the form actions
  21. $pesquisa = $this->form->addQuickAction('Pesquisar', new TAction(array($this, 'onSearch')), 'fa:search fa-search');
  22. $pesquisa->class = 'btn btn-primary';
  23. $disciplina->setValue(TSession::getValue('descricao'));
  24. $painel1 = new TPanelGroup('Pesquisar Disciplina');
  25. $painel1->add($this->form);
  26. // Criando o DataGrid
  27. $this->datagrid = new BootstrapDatagridWrapper(new TQuickGrid);
  28. $this->datagrid->style = "width: 100%";
  29. //$this->datagrid->setHeight(230);
  30. $this->datagrid->addQuickColumn('ID', 'dis_id', 'right', 100);
  31. $this->datagrid->addQuickColumn('Disciplina', 'dis_descricao', 'left', 400);
  32. $this->datagrid->addQuickColumn('Carga Horária', 'dis_carga_horaria', 'left', 100);
  33. $this->datagrid->addQuickColumn('Ementa', 'dis_ementa', 'left', 400);
  34. // Ação editar no click do DataGrid
  35. $editar = new TDataGridAction(array('DisciplinaFormCadastro', 'onEdit'));
  36. $this->datagrid->addQuickAction('Editar', $editar, 'dis_id', 'fa:pencil fa-pencil');
  37. // Cria o model DataGrid
  38. $this->datagrid->createModel();
  39. // Cria um painel com o título do formulário
  40. $painel2 = new TPanelGroup('Lista de Disciplinas');
  41. //$panel->style="width: 100%";
  42. //$panel->add($this->form);
  43. $painel2->add($this->datagrid);
  44. $painel2->addFooter('Rodapé');
  45. // Cria a página de navegação
  46. $this->pageNavigation = new TPageNavigation;
  47. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  48. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  49. // Container principal da página e BreadCrumb
  50. $vbox = new TVBox;
  51. $vbox->style = 'width:100%';
  52. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  53. $vbox->add($painel1);
  54. $vbox->add($painel2);
  55. $vbox->add($this->pageNavigation);
  56. parent::add($vbox);
  57. }
  58. /**
  59. * method onSearch()
  60. * Register the filter in the session when the user performs a search
  61. */
  62. public function onSearch()
  63. {
  64. // get the search form data
  65. $data = $this->form->getData();
  66. // check if the user has filled the form
  67. if (isset($data->dis_disciplina)) {
  68. // creates a filter using what the user has typed
  69. $filter = new TFilter('dis_disciplina', 'like', "%{$data->dis_disciplina}%");
  70. // stores the filter in the session
  71. TSession::setValue('filtro', $filter);
  72. TSession::setValue('descricao', $data->dis_disciplina);
  73. // fill the form with data again
  74. $this->form->setData($data);
  75. }
  76. $param = array();
  77. $param['offset'] = 0;
  78. $param['first_page'] = 1;
  79. $this->onReload($param);
  80. }
  81. public function onReload($param = null)
  82. {
  83. try {
  84. TTransaction::open('sample');
  85. $repositorio = new TRepository('Disciplina');
  86. $limit = 10;
  87. $criterio = new TCriteria;
  88. $objetos = $repositorio->load($criterio);
  89. $this->datagrid->clear();
  90. if ($objetos) {
  91. foreach ($objetos as $obj) {
  92. $this->datagrid->addItem($obj);
  93. }
  94. }
  95. $count = $repositorio->count($criterio);
  96. $this->pageNavigation->setCount($count);
  97. $this->pageNavigation->setLimit($limit);
  98. TTransaction::close();
  99. } catch (Error $e) {
  100. new TMessage('Erro', $e->getMessage());
  101. }
  102. $this->loaded = true;
  103. }
  104. public function show()
  105. {
  106. if (!$this->loaded) {
  107. $this->onReload();
  108. }
  109. parent::show(); // TODO: Change the autogenerated stub
  110. }
  111. }
  112. ?>

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


LC

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.

EL

Muito obrigado Leandro Coelho fiz as alterações e funcionou.