Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Mover Scroll do Data Grid Pessoal estou tentando via JavaScript mover o scroll do data grid porém estou pecando em algo o código que estou usando é esse: ...
FC
Mover Scroll do Data Grid  
Fechado
Pessoal estou tentando via JavaScript mover o scroll do data grid porém estou pecando em algo o código que estou usando é esse:
  1. <?php 
  2. TScript::create("
  3.         
  4. $('#tdatagrid_table').attr({scrollTop: $('#tdatagrid_table').attr('scrollHeight')});  
  5.         
  6.         ");
  7.  ?>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (8)


FC

Consegui fica aqui para caso alguém precise.

TScript::create("

$('#tdatagrid_body').scrollTop(800);

");
RC

Valeu a dica
RC

Felipe. Em que parte do código deve ser colocado esse script? Seria no método construtor?
FC

No meu caso coloco no onSeach antes do onReload ele faz o scroll descer ainda falta eu descobrir uma forma de recuperar o valor do scrollTop para quando eu atualizar ele retornar o scroll para a posição que estava.

Tem que colocar o id na classe TDataGrid senão dá erro.
FC

Primeiro vamos entender minha necessidade tenho um data grid onde é feito lançamentos mensais e existe atualizações manual que é um saco ficar rolando o scroll dessa forma.

Vamos ao passos:

1 - Na classe TDataGrid incluido o id tdatagrid_body. //não recomendo mexer no core o ideal é criar outra classe.

2 - Criado o campo THilden na classe do DataGrid

3 - Criado o código java que vai pegar onde o scroll parou.
Pode ser incluído em qualquer parte dentro da classe


  1. <?php
  2. TScript::create('       
  3.         
  4.             var TO = false;
  5.             var scroll_static = true;
  6.             
  7.             $(\\'#tdatagrid_body\\').scroll(function(){
  8.             
  9.             
  10.             if( scroll_static ){
  11.                 //console.log(\\'start scrolling\\');
  12.                 scroll_static false;
  13.             }
  14.             
  15.             if(TO !== false){ clearTimeout(TO); }           
  16.             TO setTimeout(myfunction200); 
  17.             
  18.             
  19.             }); 
  20.             
  21.             
  22.             function myfunction(){
  23.                         
  24.             scroll_static true;
  25.             var x  = $(\\'#tdatagrid_body\\').scrollTop();
  26.             //console.log(x);
  27.             $("input[name=\\'scroll\\']").val(x);
  28.                         
  29.             }
  30.   
  31. ');
  32.         
  33.         
  34.     }
  35. ?>


Depois no onSearch
  1. <?php
  2. $data $this->form->getData();
  3. TSession::setValue('varscroll',$data->scroll);
  4. ?>


Para Finalizar no onReload
  1. <?php
  2. $varscroll TSession::getValue('varscroll');
  3.             TScript::create("       
  4.             $('#tdatagrid_body').scrollTop({$varscroll}); 
  5.             ");
  6.  ?>


AM

Eu fiz e deu errado. Onde eu coloco esse código que vc postou acima?
  1. <?php
  2. TScript::create('
  3. ====================
  4. Outra coisa, nessa última postagem, pq vc não falou nada a respeito do código abaixo?
  5. TScript::create(" 
  6. $('#tdatagrid_body').scrollTop(800); 
  7. ");
  8. Ainda usa-se o código acima?
  9. ==========================
  10. Outra coisa, o meu datagrid já mostra a numeração de páginas no rodapé, e eu gero com o assistente do adianti pro 2.0, é necessário mover esta barra scroll? E pq no meu datagrid não aparece esta barra?
AM

Ai está todo o meu código da consulta ou pesquisa, como eu uso este código para exibir a barra e mover o scroll do datagrid? Dá para postar o mesmo código acima com as alterações?

==================================
  1. <?php
  2. class SalarioList extends TPage
  3. {
  4.     private $form;     // formulário de registro
  5.     private $datagrid// listagem
  6.     private $pageNavigation;
  7.     private $loaded;
  8.     
  9.     public function __construct()
  10.     {
  11.         parent::__construct();
  12.         // Executa um script que substitui o Tab pelo Enter.
  13.         parent::include_js('app/lib/include/application.js');
  14.         
  15.         // Set focus no campo especificado
  16.         TScript::create('setTimeout(function() { $("input[name=\'id\']").focus() }, 500);');     
  17.         
  18.         // ccria o formulário
  19.         $this->form = new TForm('form_search_Salario');
  20.         $this->form->class 'tform'// CSS class
  21.         
  22.         // cria a tabela
  23.         $table = new TTable;
  24.         $table-> width '100%';
  25.         $this->form->add($table);
  26.         
  27.         // adicionar uma linha para o título do formulário
  28.         $row $table->addRow();
  29.         $row->class 'tformtitle'// CSS class
  30.         $row->addCell( new TLabel('Preencha um dos campos para pesquisa') )->colspan 2;
  31.         // criar os campos do formulário
  32.         $id                             = new TEntry('id');
  33.         $nome                           = new TEntry('nome');
  34.         $empresa                        = new TEntry('empresa');
  35.         // definir os tamanhos dos campos
  36.         $id->setSize(50);
  37.         $nome->setSize(540);
  38.         $empresa->setSize(540);
  39.         
  40.         // Número de Caracteres permitidos dentro dos campos  
  41.         $id->setMaxLength(7);
  42.         $nome->setMaxLength(60);        
  43.         $empresa->setMaxLength(60);        
  44.         // adiciona uma linha para cada campo de formulário
  45.         $table->addRowSet( new TLabel('Código:'), $id );
  46.         $table->addRowSet( new TLabel('Nome do Empregado:'), $nome );
  47.         $table->addRowSet( new TLabel('Nome da Empresa:'), $empresa );
  48.         $this->form->setFields(array($id,$nome,$empresa));
  49.         // manter o formulário preenchido durante a navegação com dados da sessão
  50.         $this->form->setDataTSession::getValue('Salario_filter_data') );
  51.         
  52.         // criar botões de ação para o formulário
  53.         $find_button TButton::create('find', array($this'onSearch'), _t('Find'), 'ico_find.png');
  54.    //     $new_button  = TButton::create('new',  array('SalarioForm', 'onEdit'), _t('New'), 'ico_new.png');
  55.         $list_button  TButton::create('list',  array('SalarioList''onReload'), ('Limpar Campos'), 'ico_ok.png'); 
  56.         $tudo_button  TButton::create('tudo',  array('SalarioList''onTudo'), ('Excluir Tudo'), 'ico_delete.png');
  57.         $export_button TButton::create('export', array('SalarioList''onExportCSV'), ('Exportar'), 'ico_print.png');        
  58.         $ajuda_button  TButton::create('ajuda',  array('Ajuda''onShow'), ('Ajuda'), 'ico_question.png');        
  59.                  
  60.         $this->form->addField($find_button);
  61.    //     $this->form->addField($new_button);
  62.         $this->form->addField($list_button);    
  63.         $this->form->addField($tudo_button);
  64.         $this->form->addField($export_button);         
  65.         $this->form->addField($ajuda_button);        
  66.                 
  67.         $buttons_box = new THBox;
  68.         $buttons_box->add($find_button);
  69.    //     $buttons_box->add($new_button);
  70.         $buttons_box->add($list_button);
  71.         $buttons_box->add($tudo_button);
  72.         $buttons_box->add($export_button);        
  73.         $buttons_box->add($ajuda_button);                     
  74.         
  75.         // adicionar uma linha para a ação de formulário
  76.         $row $table->addRow();
  77.         $row->class 'tformaction'// CSS class
  78.         $row->addCell($buttons_box)->colspan 2;
  79.         
  80.         // cria a datagrid
  81.         $this->datagrid = new TDataGrid;
  82.         $this->datagrid->setHeight(320);
  83.         // cria as colunas datagrid
  84.         $id       = new TDataGridColumn('id''Código''center'7);
  85.         $nome     = new TDataGridColumn('nome''Nome do Empregado''left'250);
  86.         $empresa  = new TDataGridColumn('empresa''Nome da Empresa''left'250);
  87.         // adicionar as colunas para o DataGrid
  88.         $this->datagrid->addColumn($id);
  89.         $this->datagrid->addColumn($nome);
  90.         $this->datagrid->addColumn($empresa);
  91.         // cria as ações na colunas datagrid
  92.         $order_id= new TAction(array($this'onReload'));
  93.         $order_id->setParameter('order''id');
  94.         $id->setAction($order_id);
  95.         $order_nome= new TAction(array($this'onReload'));
  96.         $order_nome->setParameter('order''nome');
  97.         $nome->setAction($order_nome);
  98.         $order_empresa= new TAction(array($this'onReload'));
  99.         $order_empresa->setParameter('order''empresa');
  100.         $empresa->setAction($order_empresa);
  101.         
  102.         // cria duas ações datagrid
  103.         $action1 = new TDataGridAction(array('SalarioForm''onEdit'));
  104.         $action1->setLabel(_t('Edit'));
  105.         $action1->setImage('ico_edit.png');
  106.         $action1->setField('id');
  107.         
  108.         $action2 = new TDataGridAction(array($this'Delete'));
  109.         $action2->setLabel(_t('Delete'));
  110.         $action2->setImage('ico_delete.png');
  111.         $action2->setField('id');
  112.         
  113.         // adicionar as ações para o datagrid
  114.         $this->datagrid->addAction($action1);
  115.         $this->datagrid->addAction($action2);
  116.         
  117.         // criar o modelo datagrid
  118.         $this->datagrid->createModel();
  119.         
  120.         // cria a navegação de página
  121.         $this->pageNavigation = new TPageNavigation;
  122.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  123.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  124.         
  125.         // criar o contêiner página
  126.         $container TVBox::pack$this->form$this->datagrid$this->pageNavigation);
  127.         parent::add($container);
  128.         
  129.         
  130.     }
  131.     
  132.     function onSearch()
  133.     {
  134.         // obter os dados de formulário de pesquisa
  135.         $data $this->form->getData();
  136.         
  137.         // filtros de sessão clear
  138.         TSession::setValue('SalarioList_filter_id',   NULL);
  139.         TSession::setValue('SalarioList_filter_nome',   NULL);
  140.         TSession::setValue('SalarioList_filter_empresa',   NULL);
  141.         if (isset($data->id) AND ($data->id)) {
  142.             $filter = new TFilter('id''like'"%{$data->id}%"); // criar o filtro
  143.             TSession::setValue('SalarioList_filter_id',   $filter); // armazena o filtro na sessão
  144.         }
  145.         if (isset($data->nome) AND ($data->nome)) {
  146.             $filter = new TFilter('nome''like'"%{$data->nome}%"); // criar o filtro
  147.             TSession::setValue('SalarioList_filter_nome',   $filter); // armazena o filtro na sessão
  148.         }
  149.         if (isset($data->empresa) AND ($data->empresa)) {
  150.             $filter = new TFilter('empresa''like'"%{$data->empresa}%"); // criar o filtro
  151.             TSession::setValue('SalarioList_filter_empresa',   $filter); // armazena o filtro na sessão
  152.         }
  153.         
  154.         // preencher o formulário com os dados novamente
  155.         $this->form->setData($data);
  156.         
  157.         // manter os dados de pesquisa na sessão
  158.         TSession::setValue('Salario_filter_data'$data);
  159.         
  160.         $param=array();
  161.         $param['offset']    =0;
  162.         $param['first_page']=1;
  163.         $this->onReload($param);
  164.     }
  165.     
  166.     function onReload($param NULL)
  167.     {
  168.         try
  169.         {
  170.             // abrir uma transação com banco de dados 'dbsalario'
  171.             TTransaction::open('dbsalario');
  172.             
  173.             // cria um repositório para Salario
  174.             $repository = new TRepository('Salario');
  175.             $limit 10;
  176.             // cria um critério
  177.             $criteria = new TCriteria;
  178.             
  179.             // ordem padrão
  180.             if (empty($param['order']))
  181.             {
  182.                 $param['order'] = 'id';
  183.                 $param['direction'] = 'asc';
  184.             }
  185.             $criteria->setProperties($param); // ordem, offset
  186.             $criteria->setProperty('limit'$limit);
  187.             
  188.             if (TSession::getValue('SalarioList_filter_id')) {
  189.                 $criteria->add(TSession::getValue('SalarioList_filter_id')); // adicionar o filtro da sessão
  190.             }
  191.             if (TSession::getValue('SalarioList_filter_nome')) {
  192.                 $criteria->add(TSession::getValue('SalarioList_filter_nome')); // adicionar o filtro da sessão
  193.             }
  194.             if (TSession::getValue('SalarioList_filter_empresa')) {
  195.                 $criteria->add(TSession::getValue('SalarioList_filter_empresa')); // adicionar o filtro da sessão
  196.             }
  197.             
  198.             // carregar os objectos de acordo com critérios
  199.             $objects $repository->load($criteriaFALSE);
  200.             
  201.             $this->datagrid->clear();
  202.             $this->form->clear();             
  203.             if ($objects)
  204.             {
  205.                 // iterar a coleção de registros ativos
  206.                 foreach ($objects as $object)
  207.                 {
  208.                     // adicionar o objeto dentro do datagrid
  209.                     $this->datagrid->addItem($object);
  210.                 }
  211.             }
  212.             
  213.             // redefinir os critérios para a contagem de registro
  214.             $criteria->resetProperties();
  215.             $count$repository->count($criteria);
  216.             
  217.             $this->pageNavigation->setCount($count); // contagem de registros
  218.             $this->pageNavigation->setProperties($param); // ordem, página
  219.             $this->pageNavigation->setLimit($limit); // limite
  220.             
  221.             // fechar a transacção
  222.             TTransaction::close();
  223.             $this->loaded true;
  224.         }
  225.         catch (Exception $e// em caso de excepção
  226.         {
  227.             // mostra a mensagem de erro de exceção
  228.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  229.             
  230.             // desfazer todas as operações pendentes
  231.             TTransaction::rollback();
  232.         }
  233.     }
  234.     function onExportCSV()
  235.     {
  236.         $this->onSearch();
  237.         try
  238.         {
  239.             // open a transaction with database 'dbsalario'
  240.             TTransaction::open('dbsalario');
  241.             
  242.             // creates a repository for Salario
  243.             $repository = new TRepository('Salario');
  244.             
  245.             // creates a criteria
  246.             $criteria = new TCriteria;
  247.             
  248.             if (TSession::getValue('salario_filter1'))
  249.             {
  250.                 // add the filter stored in the session to the criteria
  251.                 $criteria->add(TSession::getValue('salario_filter1'));
  252.             }
  253.             
  254.             if (TSession::getValue('salario_filter2'))
  255.             {
  256.                 // add the filter stored in the session to the criteria
  257.                 $criteria->add(TSession::getValue('salario_filter2'));
  258.             }
  259.             
  260.             $csv '';
  261.             // load the objects according to criteria
  262.             $salarios $repository->load($criteria);
  263.             if ($salarios)
  264.             {
  265.                     $csv .= utf8_decode('Código').';'.
  266.                             utf8_decode('Empregado').';'.
  267.                             utf8_decode('Empresa')."\n";
  268.                                         
  269.                 foreach ($salarios as $salario)
  270.                 {
  271.                     $csv .= $salario->id.';'.
  272.                             utf8_decode($salario->nome).';'.
  273.                             utf8_decode($salario->empresa)."\n";
  274.                 }
  275.                 file_put_contents('app/output/salarios.csv'$csv);
  276.                 TPage::openFile('app/output/salarios.csv');
  277.             }
  278.             // close the transaction
  279.             TTransaction::close();
  280.         }
  281.         catch (Exception $e// in case of exception
  282.         {
  283.             // shows the exception error message
  284.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  285.             // undo all pending operations
  286.             TTransaction::rollback();
  287.         }
  288.     }     
  289.     
  290.  /*
  291.  
  292.      Se for incluir pergunta antes de excluir um registro,
  293.      então, acione esta função abaixo, e depois lá em cima,
  294.      nos botões de ações, substitua: (delete) por (ondelete).
  295.     function onDelete($param)
  296.     {
  297.         // definir a ação de exclusão
  298.         $action = new TAction(array($this, 'Delete'));
  299.         $action->setParameters($param); // pass the key parameter ahead
  300.         
  301.         // mostra uma caixa de diálogo para o usuário
  302.         new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'), $action);
  303.     }
  304. */
  305.     
  306.     function Delete($param)
  307.     {
  308.         try
  309.         {
  310.             $key=$param['key']; // obter o parâmetro $key
  311.             TTransaction::open('dbsalario'); // abrir uma transação com banco de dados
  312.             $object = new Salario($keyFALSE); // instancia o Active Record
  313.             $object->delete(); //exclui o objeto do banco de dados
  314.             TTransaction::close(); // fechar a transacção
  315.             $this->onReload$param ); // recarregar a listagem
  316. //            new TMessage('info', TAdiantiCoreTranslator::translate('Registro Excluído')); // mensagem de sucesso
  317.         }
  318.         catch (Exception $e// em caso de excepção
  319.         {
  320.             new TMessage('error''<b>Error</b> ' $e->getMessage()); // mostra a mensagem de erro de exceção
  321.             TTransaction::rollback(); // desfazer todas as operações pendentes
  322.         }
  323.     }
  324.     
  325.     function onTudo($param)
  326.     {
  327.         $action = new TAction(array($this'Tudo'));
  328.         $action->setParameters($param);
  329.         new TQuestion('Deseja Excluir Todos os Registros?'$action);
  330.     }
  331.     public function Tudo$param )
  332.     {
  333.         try
  334.         {
  335.             TTransaction::open('dbsalario'); 
  336.             $repository = new TRepository('Salario'); 
  337.             $repository->delete(); 
  338. //            new TMessage('info', 'Todos os Registros foram Excluidos.'); 
  339.             TTransaction::close();
  340.             $this->onReload(); 
  341.         }
  342.         catch (Exception $e)
  343.         {
  344.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  345.             TTransaction::rollback();
  346.         }
  347.     }    
  348.     
  349.     function show()
  350.     {
  351.         // verificar se o datagrid já está carregado
  352.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  353.         {
  354.             $this->onReloadfunc_get_arg(0) );
  355.         }
  356.         parent::show();
  357.     }
  358. }
PD

No layout.html do tutor tem um código que faz a rolagem ir para o topo sempre que uma página é trocada.
Como a carga das páginas é por Ajax, às vezes a rolagem fica na parte de baixo da página, então isso ajuda:

Adianti.onBeforeLoad = function(url)
{
$("html, body").animate({ scrollTop: 0 }, "fast");
};