Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Duas datagrids com PageNavigation Olá pessoal boa tarde, estou com alguns problemas com o pagenavegation, estou criando em uma classe com dois datagrids, porém quando usa o pagenavegation ele modifica os dois. Ex: Se clica na opção 2 todos os dois trocam para página 2. Segue meu código e serei grato pela ajuda. ...
FV
Duas datagrids com PageNavigation  
Fechado
Olá pessoal boa tarde, estou com alguns problemas com o pagenavegation, estou criando em uma classe com dois datagrids, porém quando usa o pagenavegation ele modifica os dois. Ex: Se clica na opção 2 todos os dois trocam para página 2.

Segue meu código e serei grato pela ajuda.


 
  1. <?php
  2. class EmpresasList extends TPage
  3. {
  4. private $form;
  5. private $datagridEmpresas;
  6. private $datagridTablets;
  7. private $pageNavigationEmpresas;
  8. private $pageNavigationTablets;
  9. private $loaded;
  10. public function __construct()
  11. {
  12. parent::__construct();
  13. new TSession;
  14. $this->form = new TQuickForm('form_listar_empresas');
  15. $this->form->class = 'tform';
  16. $this->form->style = 'width: 100%';
  17. $this->form->setFormTitle('Listagem de Empresas');
  18. $codigoEmpresa = new TEntry('id_empresa');
  19. $razaoSocial = new TEntry('razao_social');
  20. $cnpj = new TEntry('cnpj');
  21. $endereco = new TEntry('endereco');
  22. $bairro = new TEntry('bairro');
  23. $cidade = new TEntry('cidade');
  24. $uf = new TEntry('estado');
  25. $telefone = new TEntry('telefone');
  26. $opcao = new TCombo('opcao');
  27. $busca = new TEntry('razao_social');
  28. $items = array();
  29. $items['razao_social'] = 'Razão Social';
  30. $items['id_empresa'] = 'Cód. Empresa';
  31. $items['cnpj'] = 'CNPJ';
  32. $opcao->addItems($items);
  33. $opcao->setValue('razao_social');
  34. $opcao->setSize(120);
  35. $busca->setSize(300);
  36. $btnBuscar = new TButton('btn_buscar');
  37. $btnBuscar->setAction(new TAction(array($this, 'onSearch')), 'Buscar');
  38. $btnBuscar->setImage('ico_find.png');
  39. $this->form->addQuickFields(null, array($opcao, $busca, $btnBuscar));
  40. $this->form->addQuickAction('Novo', new TAction(array('EmpresasForm', 'onEdit')), 'ico_new.png');
  41. $this->datagridEmpresa = new TQuickGrid;
  42. $this->datagridEmpresa->style = 'width: 100%';
  43. $codigoEmpresa = new TDataGridColumn('id_empresa', 'Código', 'left', 60);
  44. $razaoSocial = new TDataGridColumn('razao_social', 'Razão Social', 'left', 250);
  45. $cnpj = new TDataGridColumn('cnpj', 'CNPJ', 'left', 120);
  46. $endereco = new TDataGridColumn('endereco', 'Endereço', 'left', 150);
  47. $bairro = new TDataGridColumn('bairro', 'Bairro', 'left', 70);
  48. $cidade = new TDataGridColumn('cidade', 'Cidade', 'left', 70);
  49. $uf = new TDataGridColumn('estado', 'UF', 'left', 70);
  50. $telefone = new TDataGridColumn('telefone', 'Telefone', 'left', 120);
  51. $order1 = new TAction(array($this, 'onReload'));
  52. $order2 = new TAction(array($this, 'onReload'));
  53. $order3 = new TAction(array($this, 'onReload'));
  54. $order4 = new TAction(array($this, 'onReload'));
  55. $order5 = new TAction(array($this, 'onReload'));
  56. $order6 = new TAction(array($this, 'onReload'));
  57. $order7 = new TAction(array($this, 'onReload'));
  58. $order8 = new TAction(array($this, 'onReload'));
  59. $order1->setParameter('order', 'id_empresa');
  60. $order2->setParameter('order', 'razao_social');
  61. $order3->setParameter('order', 'cnpj');
  62. $order4->setParameter('order', 'endereco');
  63. $order5->setParameter('order', 'bairro');
  64. $order6->setParameter('order', 'cidade');
  65. $order7->setParameter('order', 'estado');
  66. $order8->setParameter('order', 'telefone');
  67. $codigoEmpresa->setAction($order1);
  68. $razaoSocial->setAction($order2);
  69. $cnpj->setAction($order3);
  70. $endereco->setAction($order4);
  71. $bairro->setAction($order5);
  72. $cidade->setAction($order6);
  73. $uf->setAction($order7);
  74. $telefone->setAction($order8);
  75. $this->datagridEmpresa->addColumn($codigoEmpresa);
  76. $this->datagridEmpresa->addColumn($razaoSocial);
  77. $this->datagridEmpresa->addColumn($cnpj);
  78. $this->datagridEmpresa->addColumn($endereco);
  79. $this->datagridEmpresa->addColumn($bairro);
  80. $this->datagridEmpresa->addColumn($cidade);
  81. $this->datagridEmpresa->addColumn($uf);
  82. $this->datagridEmpresa->addColumn($telefone);
  83. $action1 = new TDataGridAction(array('EmpresasForm', 'onEdit'));
  84. $action1->setLabel('Editar');
  85. $action1->setImage('ico_edit.png');
  86. $action1->setField('id_empresa');
  87. $action2 = new TDataGridAction(array($this, 'onDelete'));
  88. $action2->setLabel('Excluir');
  89. $action2->setImage('ico_delete.png');
  90. $action2->setField('id_empresa');
  91. $this->datagridEmpresa->addAction($action1);
  92. $this->datagridEmpresa->addAction($action2);
  93. $this->datagridEmpresa->disableDefaultClick();
  94. $this->datagridEmpresa->createModel();
  95. $this->pageNavigationEmpresas = new TPageNavigation;
  96. $this->pageNavigationEmpresas->setAction(new TAction(array($this, 'onReload')));
  97. $this->pageNavigationEmpresas->setWidth($this->datagridEmpresa->getWidth());
  98. $this->pageNavigationEmpresas = new TPageNavigation;
  99. $this->pageNavigationEmpresas->setAction(new TAction(array($this, 'onReload')));
  100. $this->pageNavigationEmpresas->setWidth($this->datagridEmpresa->getWidth());
  101. $this->datagridTablets = new TQuickGrid;
  102. $this->datagridTablets->style = 'width: 100%';
  103. $codigo = new TDataGridColumn('id', 'Código', 'left', 60);
  104. $tablet = new TDataGridColumn('tablet_id', 'Tablet', 'left', 250);
  105. $vendedor = new TDataGridColumn('nome_vendedor', 'Vendedor', 'left', 120);
  106. $autorizado = new TDataGridColumn('autorizado', 'Autorizado', 'left', 150);
  107. $supervisor = new TDataGridColumn('supervisor', 'Supervisor', 'left', 70);
  108. $order1 = new TAction(array($this, 'onReload'));
  109. $order2 = new TAction(array($this, 'onReload'));
  110. $order3 = new TAction(array($this, 'onReload'));
  111. $order4 = new TAction(array($this, 'onReload'));
  112. $order5 = new TAction(array($this, 'onReload'));
  113. $order1->setParameter('order', 'id');
  114. $order2->setParameter('order', 'tablet_id');
  115. $order3->setParameter('order', 'nome_vendedor');
  116. $order4->setParameter('order', 'autorizado');
  117. $order5->setParameter('order', 'supervisor');
  118. $codigo->setAction($order1);
  119. $tablet->setAction($order2);
  120. $vendedor->setAction($order3);
  121. $autorizado->setAction($order4);
  122. $supervisor->setAction($order5);
  123. $this->datagridTablets->addColumn($codigo);
  124. $this->datagridTablets->addColumn($tablet);
  125. $this->datagridTablets->addColumn($vendedor);
  126. $this->datagridTablets->addColumn($autorizado);
  127. $this->datagridTablets->addColumn($supervisor);
  128. $this->datagridTablets->disableDefaultClick();
  129. $this->datagridTablets->createModel();
  130. $this->pageNavigationTablets = new TPageNavigation;
  131. $this->pageNavigationTablets->setAction(new TAction(array($this, 'onReload')));
  132. $this->pageNavigationTablets->setWidth($this->datagridTablets->getWidth());
  133. $this->pageNavigationTablets = new TPageNavigation;
  134. $this->pageNavigationTablets->setAction(new TAction(array($this, 'onReload')));
  135. $this->pageNavigationTablets->setWidth($this->datagridTablets->getWidth());
  136. $table = new TTable;
  137. $table->addRow()->addCell($this->form);
  138. $table->addRow()->addCell($this->datagridEmpresa);
  139. $table->addRow()->addCell($this->pageNavigationEmpresas);
  140. $table->addRow()->addCell($this->datagridTablets);
  141. $table->addRow()->addCell($this->pageNavigationTablets);
  142. parent::add($table);
  143. }
  144. function onSearch()
  145. {
  146. $data = $this->form->getData();
  147. if (isset($data->opcao) AND ($data->opcao)){
  148. $campo = $data->opcao;
  149. $dados = $data->razao_social;
  150. if (is_numeric($dados)) {
  151. $filter = new TFilter($campo, '=', $dados);
  152. }
  153. else {
  154. $filter = new TFilter($campo, 'like', '%'.$dados.'%');
  155. }
  156. TSession::setValue('filtro_empresa', $filter);
  157. }
  158. $this->form->setData($data);
  159. $param=array();
  160. $param['offset'] = 0;
  161. $param['first_page'] = 1;
  162. $this->onReload($param);
  163. }
  164. function onReload($param = NULL)
  165. {
  166. try
  167. {
  168. TTransaction::open('db_monitor');
  169. $repositoryEmpresas = new TRepository('EmpresasRecord');
  170. $repositoryTablets = new TRepository('TabletsRecord');
  171. $criteriaEmpresas = new TCriteria;
  172. $criteriaTablets = new TCriteria;
  173. if (empty($param['order']))
  174. {
  175. $param['order'] = 'id_empresa';
  176. $param['direction'] = 'asc';
  177. }
  178. if (TSession::getValue('filtro_empresa')){
  179. $criteriaEmpresas->add(TSession::getValue('filtro_empresa'));
  180. }
  181. $limitEmpresas = 8;
  182. $criteriaEmpresas->setProperties($param);
  183. $criteriaEmpresas->setProperty('limit', $limitEmpresas);
  184. $objects = $repositoryEmpresas->load($criteriaEmpresas);
  185. $this->datagridEmpresa->clear();
  186. if ($objects)
  187. {
  188. foreach ($objects as $object)
  189. {
  190. $this->datagridEmpresa->addItem($object);
  191. }
  192. }
  193. $limitTablets = 8;
  194. $criteriaTablets->setProperties($param);
  195. $criteriaTablets->setProperty('limit', $limitTablets);
  196. $objects = $repositoryTablets->load($criteriaTablets);
  197. $this->datagridTablets->clear();
  198. if ($objects)
  199. {
  200. foreach ($objects as $object)
  201. {
  202. $this->datagridTablets->addItem($object);
  203. }
  204. }
  205. $criteriaEmpresas->resetProperties();
  206. $countEmpresas = $repositoryEmpresas->count($criteriaEmpresas);
  207. $this->pageNavigationEmpresas->setCount($countEmpresas);
  208. $this->pageNavigationEmpresas->setProperties($param);
  209. $this->pageNavigationEmpresas->setLimit($limitEmpresas);
  210. $criteriaTablets->resetProperties();
  211. $countTablets = $repositoryEmpresas->count($criteriaTablets);
  212. $this->pageNavigationTablets->setCount($countTablets);
  213. $this->pageNavigationTablets->setProperties($param);
  214. $this->pageNavigationTablets->setLimit($limitTablets);
  215. TTransaction::close();
  216. $this->loaded = true;
  217. }
  218. catch (Exception $e)
  219. {
  220. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  221. TTransaction::rollback();
  222. }
  223. }
  224. function onDelete($param)
  225. {
  226. $action = new TAction(array($this, 'Delete'));
  227. $action->setParameters($param);
  228. new TQuestion('Deseja realmente excluir?', $action);
  229. }
  230. function Delete($param)
  231. {
  232. try
  233. {
  234. $key=$param['key'];
  235. TTransaction::open('db_monitor');
  236. $object = new EmpresasRecord($key);
  237. $object->delete();
  238. TTransaction::close();
  239. $this->onReload( $param );
  240. new TMessage('info', "Registro Excluido com sucesso!");
  241. }
  242. catch (Exception $e)
  243. {
  244. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  245. TTransaction::rollback();
  246. }
  247. }
  248. function show()
  249. {
  250. if (!$this->loaded)
  251. {
  252. $this->onReload( func_get_arg(0) );
  253. }
  254. parent::show();
  255. }
  256. }
  257. ?>

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


LJ

primeiro vc ta repetindo o pagenavegation, veja que a linha 163-165 é igual 166-168 , no outro igual. deixe apenas um de cada.
mas mesmo assim , ainda nao acho que é este erro. mas pode começar por ai.
NC

Fora as linhas duplicadas, que como bem disse o Luiz não é o problema.

Na linha 240 e 258, está passando o mesmo parametros para o Repository, ou seja quando cliar em um vai passar os mesmos parametros de limit e offset para os dois, pois como é passado via get e são os mesmos nomes, ambos serão repaginados.

E realmente não sei se o que deseja fazer é possivel, dois Datagrids com paginação no mesmo Form.
FV

Obrigado pelas dicas, consegui resolver, realmente grande parte do problema estava nas linhas duplicadas.
AD

Felipe Vicente, como você resolveu o problema de duas datagrids com dois PageNavigation?