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.
Segue meu código e serei grato pela ajuda.
- <?php
- class EmpresasList extends TPage
- {
- private $form;
- private $datagridEmpresas;
- private $datagridTablets;
- private $pageNavigationEmpresas;
- private $pageNavigationTablets;
- private $loaded;
- public function __construct()
- {
- parent::__construct();
- new TSession;
- $this->form = new TQuickForm('form_listar_empresas');
- $this->form->class = 'tform';
- $this->form->style = 'width: 100%';
- $this->form->setFormTitle('Listagem de Empresas');
- $codigoEmpresa = new TEntry('id_empresa');
- $razaoSocial = new TEntry('razao_social');
- $cnpj = new TEntry('cnpj');
- $endereco = new TEntry('endereco');
- $bairro = new TEntry('bairro');
- $cidade = new TEntry('cidade');
- $uf = new TEntry('estado');
- $telefone = new TEntry('telefone');
- $opcao = new TCombo('opcao');
- $busca = new TEntry('razao_social');
- $items = array();
- $items['razao_social'] = 'Razão Social';
- $items['id_empresa'] = 'Cód. Empresa';
- $items['cnpj'] = 'CNPJ';
- $opcao->addItems($items);
- $opcao->setValue('razao_social');
- $opcao->setSize(120);
- $busca->setSize(300);
- $btnBuscar = new TButton('btn_buscar');
- $btnBuscar->setAction(new TAction(array($this, 'onSearch')), 'Buscar');
- $btnBuscar->setImage('ico_find.png');
- $this->form->addQuickFields(null, array($opcao, $busca, $btnBuscar));
- $this->form->addQuickAction('Novo', new TAction(array('EmpresasForm', 'onEdit')), 'ico_new.png');
- $this->datagridEmpresa = new TQuickGrid;
- $this->datagridEmpresa->style = 'width: 100%';
- $codigoEmpresa = new TDataGridColumn('id_empresa', 'Código', 'left', 60);
- $razaoSocial = new TDataGridColumn('razao_social', 'Razão Social', 'left', 250);
- $cnpj = new TDataGridColumn('cnpj', 'CNPJ', 'left', 120);
- $endereco = new TDataGridColumn('endereco', 'Endereço', 'left', 150);
- $bairro = new TDataGridColumn('bairro', 'Bairro', 'left', 70);
- $cidade = new TDataGridColumn('cidade', 'Cidade', 'left', 70);
- $uf = new TDataGridColumn('estado', 'UF', 'left', 70);
- $telefone = new TDataGridColumn('telefone', 'Telefone', 'left', 120);
- $order1 = new TAction(array($this, 'onReload'));
- $order2 = new TAction(array($this, 'onReload'));
- $order3 = new TAction(array($this, 'onReload'));
- $order4 = new TAction(array($this, 'onReload'));
- $order5 = new TAction(array($this, 'onReload'));
- $order6 = new TAction(array($this, 'onReload'));
- $order7 = new TAction(array($this, 'onReload'));
- $order8 = new TAction(array($this, 'onReload'));
- $order1->setParameter('order', 'id_empresa');
- $order2->setParameter('order', 'razao_social');
- $order3->setParameter('order', 'cnpj');
- $order4->setParameter('order', 'endereco');
- $order5->setParameter('order', 'bairro');
- $order6->setParameter('order', 'cidade');
- $order7->setParameter('order', 'estado');
- $order8->setParameter('order', 'telefone');
- $codigoEmpresa->setAction($order1);
- $razaoSocial->setAction($order2);
- $cnpj->setAction($order3);
- $endereco->setAction($order4);
- $bairro->setAction($order5);
- $cidade->setAction($order6);
- $uf->setAction($order7);
- $telefone->setAction($order8);
- $this->datagridEmpresa->addColumn($codigoEmpresa);
- $this->datagridEmpresa->addColumn($razaoSocial);
- $this->datagridEmpresa->addColumn($cnpj);
- $this->datagridEmpresa->addColumn($endereco);
- $this->datagridEmpresa->addColumn($bairro);
- $this->datagridEmpresa->addColumn($cidade);
- $this->datagridEmpresa->addColumn($uf);
- $this->datagridEmpresa->addColumn($telefone);
- $action1 = new TDataGridAction(array('EmpresasForm', 'onEdit'));
- $action1->setLabel('Editar');
- $action1->setImage('ico_edit.png');
- $action1->setField('id_empresa');
- $action2 = new TDataGridAction(array($this, 'onDelete'));
- $action2->setLabel('Excluir');
- $action2->setImage('ico_delete.png');
- $action2->setField('id_empresa');
- $this->datagridEmpresa->addAction($action1);
- $this->datagridEmpresa->addAction($action2);
- $this->datagridEmpresa->disableDefaultClick();
- $this->datagridEmpresa->createModel();
- $this->pageNavigationEmpresas = new TPageNavigation;
- $this->pageNavigationEmpresas->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigationEmpresas->setWidth($this->datagridEmpresa->getWidth());
- $this->pageNavigationEmpresas = new TPageNavigation;
- $this->pageNavigationEmpresas->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigationEmpresas->setWidth($this->datagridEmpresa->getWidth());
- $this->datagridTablets = new TQuickGrid;
- $this->datagridTablets->style = 'width: 100%';
- $codigo = new TDataGridColumn('id', 'Código', 'left', 60);
- $tablet = new TDataGridColumn('tablet_id', 'Tablet', 'left', 250);
- $vendedor = new TDataGridColumn('nome_vendedor', 'Vendedor', 'left', 120);
- $autorizado = new TDataGridColumn('autorizado', 'Autorizado', 'left', 150);
- $supervisor = new TDataGridColumn('supervisor', 'Supervisor', 'left', 70);
- $order1 = new TAction(array($this, 'onReload'));
- $order2 = new TAction(array($this, 'onReload'));
- $order3 = new TAction(array($this, 'onReload'));
- $order4 = new TAction(array($this, 'onReload'));
- $order5 = new TAction(array($this, 'onReload'));
- $order1->setParameter('order', 'id');
- $order2->setParameter('order', 'tablet_id');
- $order3->setParameter('order', 'nome_vendedor');
- $order4->setParameter('order', 'autorizado');
- $order5->setParameter('order', 'supervisor');
- $codigo->setAction($order1);
- $tablet->setAction($order2);
- $vendedor->setAction($order3);
- $autorizado->setAction($order4);
- $supervisor->setAction($order5);
- $this->datagridTablets->addColumn($codigo);
- $this->datagridTablets->addColumn($tablet);
- $this->datagridTablets->addColumn($vendedor);
- $this->datagridTablets->addColumn($autorizado);
- $this->datagridTablets->addColumn($supervisor);
- $this->datagridTablets->disableDefaultClick();
- $this->datagridTablets->createModel();
- $this->pageNavigationTablets = new TPageNavigation;
- $this->pageNavigationTablets->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigationTablets->setWidth($this->datagridTablets->getWidth());
- $this->pageNavigationTablets = new TPageNavigation;
- $this->pageNavigationTablets->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigationTablets->setWidth($this->datagridTablets->getWidth());
- $table = new TTable;
- $table->addRow()->addCell($this->form);
- $table->addRow()->addCell($this->datagridEmpresa);
- $table->addRow()->addCell($this->pageNavigationEmpresas);
- $table->addRow()->addCell($this->datagridTablets);
- $table->addRow()->addCell($this->pageNavigationTablets);
- parent::add($table);
- }
- function onSearch()
- {
- $data = $this->form->getData();
- if (isset($data->opcao) AND ($data->opcao)){
- $campo = $data->opcao;
- $dados = $data->razao_social;
- if (is_numeric($dados)) {
- $filter = new TFilter($campo, '=', $dados);
- }
- else {
- $filter = new TFilter($campo, 'like', '%'.$dados.'%');
- }
- TSession::setValue('filtro_empresa', $filter);
- }
- $this->form->setData($data);
- $param=array();
- $param['offset'] = 0;
- $param['first_page'] = 1;
- $this->onReload($param);
- }
- function onReload($param = NULL)
- {
- try
- {
- TTransaction::open('db_monitor');
- $repositoryEmpresas = new TRepository('EmpresasRecord');
- $repositoryTablets = new TRepository('TabletsRecord');
- $criteriaEmpresas = new TCriteria;
- $criteriaTablets = new TCriteria;
- if (empty($param['order']))
- {
- $param['order'] = 'id_empresa';
- $param['direction'] = 'asc';
- }
- if (TSession::getValue('filtro_empresa')){
- $criteriaEmpresas->add(TSession::getValue('filtro_empresa'));
- }
- $limitEmpresas = 8;
- $criteriaEmpresas->setProperties($param);
- $criteriaEmpresas->setProperty('limit', $limitEmpresas);
- $objects = $repositoryEmpresas->load($criteriaEmpresas);
- $this->datagridEmpresa->clear();
- if ($objects)
- {
- foreach ($objects as $object)
- {
- $this->datagridEmpresa->addItem($object);
- }
- }
- $limitTablets = 8;
- $criteriaTablets->setProperties($param);
- $criteriaTablets->setProperty('limit', $limitTablets);
- $objects = $repositoryTablets->load($criteriaTablets);
- $this->datagridTablets->clear();
- if ($objects)
- {
- foreach ($objects as $object)
- {
- $this->datagridTablets->addItem($object);
- }
- }
- $criteriaEmpresas->resetProperties();
- $countEmpresas = $repositoryEmpresas->count($criteriaEmpresas);
- $this->pageNavigationEmpresas->setCount($countEmpresas);
- $this->pageNavigationEmpresas->setProperties($param);
- $this->pageNavigationEmpresas->setLimit($limitEmpresas);
- $criteriaTablets->resetProperties();
- $countTablets = $repositoryEmpresas->count($criteriaTablets);
- $this->pageNavigationTablets->setCount($countTablets);
- $this->pageNavigationTablets->setProperties($param);
- $this->pageNavigationTablets->setLimit($limitTablets);
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e)
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- function onDelete($param)
- {
- $action = new TAction(array($this, 'Delete'));
- $action->setParameters($param);
- new TQuestion('Deseja realmente excluir?', $action);
- }
- function Delete($param)
- {
- try
- {
- $key=$param['key'];
- TTransaction::open('db_monitor');
- $object = new EmpresasRecord($key);
- $object->delete();
- TTransaction::close();
- $this->onReload( $param );
- new TMessage('info', "Registro Excluido com sucesso!");
- }
- catch (Exception $e)
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- function show()
- {
- if (!$this->loaded)
- {
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
- }
- ?>
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.
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.
Obrigado pelas dicas, consegui resolver, realmente grande parte do problema estava nas linhas duplicadas.
Felipe Vicente, como você resolveu o problema de duas datagrids com dois PageNavigation?