Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Voltar pra uma determinada página da GRID após uma alteração Gostaria de saber como eu faço para voltar para uma determinada página de uma Grid, é o seguinte: Tenho uma grid com várias páginas, quero alterar um registro que está na página 5 , entro com a alteração, mas qdo eu salvo o registro, minha grid sempre volta pra primeira página no on Reload. Tem como eu voltar pra página que eu estava? ...
IF
Voltar pra uma determinada página da GRID após uma alteração  
Fechado
Gostaria de saber como eu faço para voltar para uma determinada página de uma Grid, é o seguinte: Tenho uma grid com várias páginas, quero alterar um registro que está na página 5 , entro com a alteração, mas qdo eu salvo o registro, minha grid sempre volta pra primeira página no on Reload. Tem como eu voltar pra página que eu estava?

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (13)


UD

pelo que entendi vc tah usando.. o TNotebook e nao grids..
e eu estiver certo usa

$this->notebook->setCurrentPage(4);
lembrando que o 4 e um array sempre comeca do 0, se a primeira pagina
sera $this->notebook->setCurrentPage(0); a a seguda $this->notebook->setCurrentPage(1);
assim por diante
IF

Estou usando uma grid mesmo, ela tem vários registros (mais de 500) e quando eu abro o form para alterar um um certo registro, quando eu clico no botando salvar (onSave) , a minha grid sempre volta pra página 1. Gostaria de saber se posso selecionar a página de uma grid no evento onReload (por exemplo).
IF

Acho que o caminho é pelo pageNavigation->setFirstPage($first_page) ou pageNavigation->sePage($page), mas não estou conseguindo implementa-lo
PD

Ivan,

Não é tão simples. Dentro do onReload(), você precisaria alterar a ação do botão, para injetar nele parâmetros de navegação:
function onReload()
{
$saveAction = $this->button->getAction();
$saveAction->setParameters($param); // important!
}

Att,
WS

isso que mata a gente, algo tão básico ser tão difícil de implementar.

Não tem exemplo em lugar algum?
WS

encucado com isso, e resolvi pelo builder apenas no ONRELOAD criando um variavel na sessao para armazenar o OFFSET e a PAGINA quando estiverem especificadas no parametro, e restaurar caso nao estejam, ou seja, quando estiver voltando de uma ação e funcionou e isso poderia ser já implementado na classe de alguma forma, como é o pablo quem criou o projeto, não acho que seja difícil, segue os blocos para o builder:
//<onBeforeDatagridLoad> if (isset($param['offset'])) { TSession::setValue('upageoffset',$param['offset']); }else { if (TSession::getValue('upageoffset')>=0) $criteria->setProperty('offset',TSession::getValue('upageoffset')); } //</onBeforeDatagridLoad></code
//<onBeforeDatagridTransactionClose> if (isset($param['page'])) { TSession::setValue('upagenav',$param['page']); }else { if (!empty(TSession::getValue('upagenav'))) $this->pageNavigation->setPage(TSession::getValue('upagenav')); } //</onBeforeDatagridTransactionClose>
WS

Tentar melhorar a visualização:
//<onBeforeDatagridLoad> if (isset($param['offset'])) { TSession::setValue('upageoffset',$param['offset']); }else { if (TSession::getValue('upageoffset')>=0) $criteria->setProperty('offset',TSession::getValue('upageoffset')); } //</onBeforeDatagridLoad>

//<onBeforeDatagridTransactionClose> if (isset($param['page'])) { TSession::setValue('upagenav',$param['page']); }else { if (!empty(TSession::getValue('upagenav'))) $this->pageNavigation->setPage(TSession::getValue('upagenav')); } //</onBeforeDatagridTransactionClose>
WS

desculpa ai, nao tem como excluir vou tentar colocar como php.
  1. <?php
  2.             //<onBeforeDatagridLoad>
  3.             if (isset($param['offset']))
  4.             {
  5.                TSession::setValue('upageoffset',$param['offset']);
  6.             }else
  7.             {
  8.                 if (TSession::getValue('upageoffset')>=0)
  9.                     $criteria->setProperty('offset',TSession::getValue('upageoffset'));
  10.             }
  11.             //</onBeforeDatagridLoad>
  12. ?>

  1. <?php
  2.             //<onBeforeDatagridTransactionClose>
  3.             if (isset($param['page']))
  4.             {
  5.                TSession::setValue('upagenav',$param['page']);
  6.             }else
  7.             {
  8.                 if (!empty(TSession::getValue('upagenav')))
  9.                     $this->pageNavigation->setPage(TSession::getValue('upagenav'));
  10.             }
  11.             //</onBeforeDatagridTransactionClose>
  12. ?>
WS

Essa é a versão final e ficou bem funcioonal, segue os pontos onde inseri os códigos:
  1. <?php
  2.             //<onBeforeDatagridLoad>
  3.             if (isset($param['offset']))
  4.             {
  5.                TSession::setValue(self::$formName 'upageoffset',$param['offset']);
  6.             }else
  7.             {
  8.                 if (TSession::getValue(self::$formName 'upageoffset')>=0)
  9.                     $criteria->setProperty('offset',TSession::getValue(self::$formName 'upageoffset'));
  10.             }
  11.             //</onBeforeDatagridLoad>
  12.             
  13.             
  14.             
  15.             //<onBeforeDatagridTransactionClose>
  16.             if (isset($param['page']))
  17.             {
  18.                TSession::setValue(self::$formName 'upagenav',$param['page']);
  19.             }else
  20.             {
  21.                 if (!empty(TSession::getValue(self::$formName 'upagenav')))
  22.                 {
  23.                     $this->pageNavigation->setFirstPage(((floor((TSession::getValue(self::$formName 'upagenav')-1)/10)*10))+1);    
  24.                     $this->pageNavigation->setPage(TSession::getValue(self::$formName 'upagenav'));
  25.                 }
  26.             }
  27.             //</onBeforeDatagridTransactionClose>
  28. ?>
LA

Bom dia pessoal, sei que é um post antigo ma tive esse mesmo problema e foi o único que encontrei relacionado a isso.
Eu consegui uma solução, não sei se é a mais certa ou se tem alguma mais simples. Porém esta bem funcional para mim.
vou postar de forma simplificada para quem quiser testar.

No grid dentro da construct adicionei um setValue gravando todos os parametros de paginação (ordem, direção o offset e o limite).

foreach($_GET as $key=>$val)
{
if(($key == "page") or ($key == "order") or ($key == "direction")
or ($key == "offset") or ($key == "limit"))
{
TSession::setValue($key, $val);
}
}
Adicionei esse bloco após o " parent::add ($container); " mas antes de fechar a construct

e no Form de edição recuperei esses dados para uso no na ação do onSave para alimentar os critérios do onReload.

$params['page'] = TSession::getValue("page");
$params['order'] = TSession::getValue("order");
$params['direction'] = TSession::getValue("direction");
$params['offset'] = TSession::getValue("offset");
$params['limit'] = TSession::getValue("limit");

// shows the success message
$mensagem = 'Registro Salvo!';
$acao = new TAction([TSession::getValue('list_origem'), 'onReload'], $params);
new TMessage('info', $mensagem, $acao);

Espero que possa ajudar alguns de vocês assim como esse fórum tanto já me ajudou
Att
LA

desculpa primeira fez que posto nao vi as tags pára códigos.
Mas acredito que esteja compreensível
LA

desculpa primeira fez que posto nao vi as tags pára códigos.
Mas acredito que esteja compreensível
WS

sim, o bom do adianti é que podemos alterar os fontes das classes também, o bom da solução que criei é que nao precisa mudar as classes, assim não dará conflitos nem trabalho para as versões futuras. O minimo que pudermos alterar nas classes dos componentes é muito bom. O legal era se o pessoal pudesse coletar essas idéias e atualizar o framework.