Lançado Adianti Framework 7.6!
Clique aqui para saber mais
PageNagation + dataGrid com campos input Galera, tenho uma pagina de listagem com campos de filtro e uma dataGrid com campos input (TEntry e TCombo), o problema é seguinte, a pagina só é carregada sem erros quando entro na pagina, se eu tentar filtrar os dados ou navegar nas paginas da datagrid da erro de elementos duplicados no form. espero que alguem tem a solução. ...
BI
PageNagation + dataGrid com campos input  
Galera, tenho uma pagina de listagem com campos de filtro e uma dataGrid com campos input (TEntry e TCombo), o problema é seguinte,
a pagina só é carregada sem erros quando entro na pagina, se eu tentar filtrar os dados ou navegar nas paginas da datagrid da erro de elementos duplicados no form.

espero que alguem tem a solução.

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


FV

Olá Betuel, poderia postar seu código? pois ficaria mais fácil de te ajudar ;)

Recomendo que siga esse exemplo: www.adianti.com.br/framework_files/tutor/index.php?class=ProductSele
BI

Fiz algo que resolve parcialmente o problema, retirei o onSearch e as sessões, assim é possível filtrar os dados, porem o pageNavigation retira os filtros se mudar de pagina na datagrid.

  1. <?php
  2. class ValCoig extends TPage
  3. {
  4.     private $form;     // registration form
  5.     private $datagrid// listing
  6.     private $pageNavigation;
  7.     private $loaded;
  8.     
  9.     /**
  10.      * Class constructor
  11.      * Creates the page, the form and the listing
  12.      */
  13.     public function __construct()
  14.     {
  15.         parent::__construct();
  16.         
  17.         // creates the form
  18.         $this->form = new TForm('form_search_ValCoig');
  19.         $this->form->class 'tform'// CSS class
  20.         
  21.         // creates a table
  22.         $table = new TTable;
  23.         $table-> width '1000px';
  24.         $this->form->add($table);
  25.         
  26.         // add a row for the form title
  27.         $row $table->addRow();
  28.         $row->class 'tformtitle'// CSS class
  29.         $row->addCell( new TLabel('Valida Ocorrências') )->colspan 10;
  30.         
  31.         // create the form fields
  32.         $id                             = new TEntry('id');
  33.         $data_coig                      = new TDate('data_coig');
  34.         $empreendimento_id              = new TDBCombo('empreendimento_id','sqlserver','Empreendimento','id','sigla');
  35.         $aplicacao_id                   = new TCombo('aplicacao_id');
  36.         $evento_aplicacao_id            = new TCombo('evento_aplicacao_id');
  37.         $nivel_montante                 = new TEntry('nivel_montante');
  38.         $obs                            = new TEntry('obs');
  39.         $systemuser_id                  = new TDBCombo('systemuser_id','sqlserver','SystemUser','id','name');
  40.         $relevancia                     = new TDBCombo('relevancia_id','sqlserver','relevancia','id','descricao');
  41.         $indicadorCoig                  = new TCombo('indicadorCoig');
  42.         $tipousina                      = new TCombo('tipousina');
  43.         
  44.         $items = array();
  45.         $items[1] ='COIG';
  46.         $items[0] ='Geral';
  47.         $indicadorCoig->addItems($items);
  48.         
  49.         $items = array();
  50.         $items['P'] ="PCH's";
  51.         $items['C'] ="CGH's";
  52.         $tipousina->addItems($items);
  53.                 
  54.         // set change action for empreendimento
  55.         $change_action = new TAction(array($this'onChange'));
  56.         $empreendimento_id->setChangeAction($change_action);
  57.         
  58.         $change_action2 = new TAction(array($this'onChange2'));
  59.         $aplicacao_id->setChangeAction($change_action2);
  60.         
  61.         // define the sizes
  62.         $id->setSize(90);
  63.         $id->setMask('9999');
  64.         $id->placeholder 'Código';
  65.         $data_coig->setSize(120);
  66.         $data_coig->placeholder 'Data';
  67.         $empreendimento_id->setSize(120);
  68.         $empreendimento_id->title 'Empreendimento';
  69.         $aplicacao_id->setSize(100);
  70.         $aplicacao_id->title 'Equipamento';
  71.         $evento_aplicacao_id->setSize(350);
  72.         $evento_aplicacao_id->title 'Evento';
  73.         $nivel_montante->setSize(70);
  74.         $nivel_montante->setMask('999.99');
  75.         $obs->setSize(450);
  76.         $obs->placeholder 'Observação';
  77.         $systemuser_id->setSize(350);
  78.         $systemuser_id->title 'Responsável';
  79.         $relevancia->setSize(100);
  80.         $relevancia->title 'Relevância';
  81.         $indicadorCoig->setSize(90);
  82.         $indicadorCoig->title 'Indicador';
  83.         $tipousina->setSize(120);
  84.         $tipousina->title 'Tipo de Usina';
  85.         
  86.         $row $table->addRow();
  87.             $row->addCell($indicadorCoig)->colspan 1;
  88.             $row->addCell($tipousina)->colspan 1;
  89.         $row $table->addRow();
  90.             //$row->addCell(new TLabel('ID:'));
  91.             $row->addCell($id);
  92.             //$row->addCell(new TLabel('Data:'));
  93.             $row->addCell($data_coig);
  94.             //$row->addCell(new TLabel('Usina:'));
  95.             $row->addCell($empreendimento_id);
  96.             //$row->addCell(new TLabel('Aplicação:'));
  97.             $row->addCell($aplicacao_id);
  98.             //$row->addCell(new TLabel('Ocorrência:'));
  99.             $row->addCell($evento_aplicacao_id);
  100.             
  101.         
  102.         $row $table->addRow();
  103.             //$row->addCell(new TLabel('Obs:'));
  104.             $row->addCell($obs)->colspan 3;
  105.             //$row->addCell(new TLabel('Relev:'));
  106.             $row->addCell(($relevancia) , ($indicadorCoig))->colspan 1;
  107.             //$row->addCell(new TLabel('Responsavel:'));
  108.             $row->addCell($systemuser_id)->colspan 1;
  109.         
  110.         $row $table->addRow();
  111.         
  112.         $this->form->setFields(array($id,$data_coig,$empreendimento_id,$aplicacao_id,$evento_aplicacao_id,$obs,$systemuser_id$relevancia$indicadorCoig$tipousina));//$nivel_montante,
  113.         // keep the form filled during navigation with session data
  114.         $this->form->setDataTSession::getValue('Coig_filter_data') );
  115.         
  116.         // create two action buttons to the form
  117.         $find_button TButton::create('find', array($this'onReload'), _t('Find'), 'ico_find.png');
  118.         
  119.         $this->form->addField($find_button);
  120.         
  121.         $buttons_box = new THBox;
  122.         $buttons_box->add($find_button);
  123.         
  124.         // add a row for the form action
  125.         $row $table->addRow();
  126.         $row->class 'tformaction'// CSS class
  127.         $row->addCell($buttons_box)->colspan 10;
  128.         
  129.         // creates a Datagrid
  130.         $this->datagrid = new TDataGrid;
  131.         //$this->datagrid->makeScrollable();
  132.         $this->datagrid->disableDefaultClick(); // important!
  133.         $this->datagrid->setHeight(420);
  134.         
  135.         $row $table->addRow();
  136.         $row->addCell($this->datagrid)->colspan 10;
  137.         
  138.         // creates the datagrid columns
  139.         $id   = new TDataGridColumn('id''ID''center'20);
  140.         $data_coig   = new TDataGridColumn('data_coig''Data''left'50);
  141.         $data_coig->setTransformer(array($this'formatDate'));//chama a função de transformar data
  142.         $hora   = new TDataGridColumn('hora''Hora''left'50);
  143.         $hora->setTransformer(array($this'formatHora'));//chama a função de transformar hora
  144.         $empreendimento_id   = new TDataGridColumn('sigla_emp''Usina''center'50);
  145.         $aplicacao_id   = new TDataGridColumn('sigla_apl''Aplicação''center'50);
  146.         $evento_aplicacao_id   = new TDataGridColumn('evento''Ocorrência''left'350);
  147.         $obs   = new TDataGridColumn('obs''Obs''left'350);
  148.         $evento_real_id   = new TDataGridColumn('evento_real_id''Evento Real''left'100);
  149.         $validador   = new TDataGridColumn('validador''Ok''center'20);
  150.         $id->setTransformer(array($this'formatRelevancia'));
  151.         
  152.         // add the columns to the DataGrid
  153.         $this->datagrid->addColumn($id);
  154.         $this->datagrid->addColumn($data_coig);
  155.         $this->datagrid->addColumn($hora);
  156.         $this->datagrid->addColumn($empreendimento_id);
  157.         $this->datagrid->addColumn($aplicacao_id);
  158.         $this->datagrid->addColumn($evento_aplicacao_id);
  159.         $this->datagrid->addColumn($obs);
  160.         $this->datagrid->addColumn($evento_real_id);
  161.         $this->datagrid->addColumn($validador);
  162.         
  163.         // creates the datagrid column actions
  164.         $order_id= new TAction(array($this'onReload'));
  165.         $order_id->setParameter('order''id');
  166.         $id->setAction($order_id);
  167.         
  168.         $order_data= new TAction(array($this'onReload'));
  169.         $order_data->setParameter('order''data_coig');
  170.         $data_coig->setAction($order_data);
  171.         
  172.         $order_usina= new TAction(array($this'onReload'));
  173.         $order_usina->setParameter('order''sigla_emp');
  174.         $empreendimento_id->setAction($order_usina);
  175.         
  176.         $order_evento= new TAction(array($this'onReload'));
  177.         $order_evento->setParameter('order''evento');
  178.         $evento_aplicacao_id->setAction($order_evento);
  179.         
  180.         // create the datagrid model
  181.         $this->datagrid->createModel();
  182.         
  183.         // creates the page navigation
  184.         $this->pageNavigation = new TPageNavigation;
  185.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  186.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  187.         
  188.         
  189.                 
  190.         $table = new TTable;
  191.         $table->style 'width: 800px';
  192.         $table->addRow()->addCell(new TXMLBreadCrumb('menu.xml'__CLASS__));
  193.         $table->addRow()->addCell($this->form);
  194.         //$table->addRow()->addCell($this->datagrid);
  195.         
  196.         
  197.         //----botão salvar----------
  198.         $save_button TButton::create('save', array($this'onSave'), ('Salvar'), 'ico_save.png');
  199.         $this->form->addField($save_button);
  200.         $buttons_box1 = new THBox;
  201.         $buttons_box1->add($save_button);
  202.         $row $table->addRow()->addCell($buttons_box1);
  203.         $row->class 'tformaction'// CSS class
  204.         
  205.         //navegador de paginas
  206.         $row $table->addRow()->addCell($this->pageNavigation);
  207.                
  208.         parent::add($table);
  209.     }
  210.     //funções para formatar data e formatar hora
  211.     public function formatDate($data_ocorrencia$object)
  212.     {
  213.         $dt = new DateTime($data_ocorrencia);
  214.         return $dt->format('d/m/y');
  215.     }
  216.     public function formatHora($hora$object)
  217.     {
  218.         $dt = new DateTime($hora);
  219.         return $dt->format('H:i:s');
  220.     }
  221.     
  222.     //transformar a linha "colorir as mais relevantes"
  223.     public function formatRelevancia($id$object$row)
  224.     {
  225.         if (PHP_SAPI !== 'cli'// just in the web version
  226.         {
  227.             if ($object->relevancia_id == 2)
  228.             {
  229.                 $row->style "color: blue";//relevancia media
  230.                 //return $relevancia_id;
  231.             }
  232.             elseif($object->relevancia_id == 3)
  233.             {
  234.                 $row->style "color: red";//relevancia alta
  235.                 //return $relevancia_id;
  236.             }
  237.             else
  238.             {
  239.                 $row->style "color: black";//relevancia normal 'background'
  240.                 
  241.             }
  242.             return $id;
  243.         }
  244.     }
  245.        
  246.     
  247.     //função para salvar
  248.     public function onSave($param)
  249.     {
  250.         try{
  251.             // get the form data into an active record Coig
  252.             $dados $this->form->getData();
  253.             $this->form->setData($dados);
  254.             
  255.             $mensagem '';
  256.             $checkbox = new stdClass();
  257.             foreach($this->form->getFields() as $name => $field){
  258.                 TTransaction::open('sqlserver'); // open a transaction
  259.                 $objeto = new ViewOcorrenciasGerais();
  260.                 
  261.                 if ($field instanceof TCheckButton){
  262.                     $mensagem .= "<br>$name: " $field->getValue();
  263.                     $valor $field->getValue();
  264.                     $id explode("r_"$name);
  265.                     
  266.                     if ($valor == 'on'){
  267.                         $checkbox->id $id[1];
  268.                         $checkbox->validador 1;
  269.                     }else{
  270.                         $checkbox->id $id[1];
  271.                         $checkbox->validador null;
  272.                     }
  273.                     
  274.                 }  
  275.                 
  276.                 if ($field instanceof TDBCombo){
  277.                     $id explode("d_"$name);
  278.                     if (! empty($id[1])){
  279.                         $mensagem .= "<br>$name: " $field->getValue();
  280.                         $valor $field->getValue();
  281.                         $id explode("d_"$name);
  282.                         
  283.                         $objeto->id $id[1];
  284.                         $objeto->evento_real_id $valor;
  285.                         if ($checkbox->id == $objeto->id){
  286.                             
  287.                             $coig = new ViewOcorrenciasGerais($objeto->id);
  288.                             if ($coig->indicadorCoig == and (empty($valor) xor empty($checkbox->validador))){
  289.                                 throw new Exception("O campo 'EVENTO REAL' é obrigatorio para a ocorrêcnia, <b><span style='color:red'> Nº: $objeto->id </span></b>!");
  290.                             }  else {
  291.                                 $objeto->validador $checkbox->validador;
  292.                                 $objeto->store(); 
  293.                                 TTransaction::close();
  294.                             }
  295.                             
  296.                         }
  297.                     }
  298.                 }
  299.                 
  300.             }
  301.                
  302.     
  303.             // show the message
  304.             
  305.             new TMessage('info''Dados gravados com sucesso!');
  306.             
  307.             
  308.             //TApplication::loadPage('ValCoig');
  309.         }
  310.         catch (Exception $e// in case of exception
  311.         {
  312.             
  313.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  314.             TTransaction::rollback();
  315.         }
  316.         
  317.     }
  318.     
  319.     
  320.     function onReload($param NULL)
  321.     {
  322.         try
  323.         {
  324.             
  325.             // open a transaction with database 'sqlserver'
  326.             TTransaction::open('sqlserver');
  327.             $data $this->form->getData();
  328.             $form = new stdClass();
  329.             $form->id                  $data->id;
  330.             $form->data_coig           $data->data_coig;
  331.             $form->empreendimento_id   $data->empreendimento_id;
  332.             $form->aplicacao_id        $data->aplicacao_id;
  333.             $form->evento_aplicacao_id $data->evento_aplicacao_id;
  334.             $form->tipousina           $data->tipousina;
  335.             $form->indicadorCoig       $data->indicadorCoig;
  336.             $form->obs                 $data->obs;
  337.             $form->relevancia_id       $data->relevancia_id;
  338.             $form->systemuser_id       $data->systemuser_id;
  339.             $this->form->setData($form);
  340.             TForm::sendData('form_search_ValCoig'$form);
  341.             
  342.             
  343.             // creates a repository for Coig
  344.             $repository = new TRepository('ViewOcorrenciasGerais');
  345.             $limit 30;
  346.             // creates a criteria
  347.             $criteria = new TCriteria;
  348.             
  349.             // default order
  350.             if (! empty($param['order']))
  351.             {
  352.                 $param['order'] = 'id';
  353.             }
  354.             $criteria->setProperties($param); // order, offset
  355.             $criteria->setProperty('limit'$limit);
  356.             
  357.             
  358.             if (isset($data->tipousina) AND ($data->tipousina)) {
  359.                 $criteria->add( new TFilter'sigla_emp''like'"{$data->tipousina}%" ));
  360.             }
  361.             
  362.             if (isset($data->id) AND ($data->id)) {
  363.                 $criteria->add( new TFilter'id''='$data->id ));
  364.             }
  365.     
  366.             if (isset($data->data_coig) AND ($data->data_coig)) {
  367.                 $criteria->add( new TFilter'data_coig''like'"%{$data->data_coig}%" ));
  368.             }
  369.     
  370.             if (isset($data->empreendimento_id) AND ($data->empreendimento_id)) {
  371.                 $criteria->add( new TFilter'empreendimento_id''='$data->empreendimento_id ));
  372.             }
  373.     
  374.             if (isset($data->aplicacao_id) AND ($data->aplicacao_id)) {
  375.                 $criteria->add( new TFilter'aplicacao_id''='$data->aplicacao_id ));
  376.             }
  377.     
  378.             if (isset($data->evento_aplicacao_id) AND ($data->evento_aplicacao_id)) {
  379.                 $criteria->add( new TFilter'evento_aplicacao_id''='$data->evento_aplicacao_id ));
  380.             }
  381.     
  382.             if (isset($data->nivel_montante) AND ($data->nivel_montante)) {
  383.                 $criteria->add( new TFilter'nivel_montante''like'"%{$data->nivel_montante}%" ));
  384.             }
  385.     
  386.             if (isset($data->obs) AND ($data->obs)) {
  387.                 $criteria->add( new TFilter'obs''like'"%{$data->obs}%"));
  388.             }
  389.             
  390.             if (isset($data->systemuser_id) AND ($data->systemuser_id)) {
  391.                 $criteria->add( new TFilter'systemuser_id''='"$data->systemuser_id));
  392.             }
  393.     
  394.             if (isset($data->relevancia_id) AND ($data->relevancia_id)) {
  395.                 $criteria->add( new TFilter'relevancia_id''='"$data->relevancia_id));
  396.             }
  397.             
  398.             if (isset($data->indicadorCoig) AND ($data->indicadorCoig)) {
  399.                 $criteria->add( new TFilter'indicadorCoig''='$data->indicadorCoig ));
  400.             }
  401.             
  402.             if (empty($param['order'])){
  403.                 $param['order'] = 'horario_coig';
  404.                 $param['direction'] = 'desc';
  405.                 $criteria->setProperties($param);
  406.             }
  407.             
  408.             // load the objects according to criteria
  409.             $objects $repository->load($criteriaFALSE);
  410.             
  411.             
  412.             $this->datagrid->clear();
  413.             if ($objects)
  414.             {
  415.                
  416.                 // iterate the collection of active records
  417.                 foreach ($objects as $object)
  418.                 {
  419.                     $eventoID $object->evento_real_id;
  420.                     $valido $object->validador;
  421.                     
  422.                     //var_dump($eventoID);
  423.                     
  424.                     
  425.                     $object->validador    = new TCheckButton("validador_".$object->id);
  426.                     $object->validador->setIndexValue('on');
  427.                     if ($valido == 1){
  428.                         $object->validador->setProperty('checked'1);
  429.                     }
  430.                     
  431.                     $object->evento_real_id = new TDBCombo('evento_real_id_'.$object->id,'sqlserver','EventoReal','id','evento');
  432.                     $object->evento_real_id->setValue($eventoID);
  433.                     
  434.                     
  435.                     // add the object inside the datagrid
  436.                     $row $this->datagrid->addItem($object);
  437.                     
  438.                     //formata os horarios de postagem e edição
  439.                     $object->agora =  date("d/m/y H:i:s"strtotime($object->agora));
  440.                     $object->data_edicao =  date("d/m/y H:i:s"strtotime($object->data_edicao));
  441.                     
  442.                     //coloca os itens em popover
  443.                     $tabela  "<table class='popover-table'>";
  444.                     if ($object->potencia or $object->nivel_montante){
  445.                         $tabela .= "<tr><td><b>Potência Ativa:</b> {$object->potencia}</td><td><b>Nível montante:</b> {$object->nivel_montante}</td></tr>";
  446.                     }
  447.                     $tabela .= "<tr><td><b>Postado por:</b> {$object->user_post}</td><td> {$object->agora}</td></tr>";
  448.                     if ($object->editor){
  449.                         $tabela .= "<tr><td><b>Editado por:</b> {$object->editor}</td><td> {$object->data_edicao}</td></tr>";
  450.                     }
  451.                     $tabela .= "</table>";
  452.                     
  453.                     //coloca os itens em popover
  454.                     $row->popover 'true';
  455.                     $row->popcontent $tabela;
  456.                     $row->poptitle 'Detalhes';
  457.                     
  458.                     $row $this->form->addField($object->validador);
  459.                     $row $this->form->addField($object->evento_real_id);
  460.                 }
  461.             }
  462.             
  463.             // reset the criteria for record count
  464.             $criteria->resetProperties();
  465.             $count$repository->count($criteria);
  466.             
  467.             $this->pageNavigation->setCount($count); // count of records
  468.             $this->pageNavigation->setProperties($param); // order, page
  469.             $this->pageNavigation->setLimit($limit); // limit
  470.             
  471.             // close the transaction
  472.             TTransaction::close();
  473.             $this->loaded true;
  474.             
  475.         }
  476.         catch (Exception $e// in case of exception
  477.         {
  478.             // shows the exception error message
  479.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  480.             
  481.             // undo all pending operations
  482.             TTransaction::rollback();
  483.         }
  484.         
  485.         
  486.     }
  487.     
  488.     
  489.     function show()
  490.     {
  491.         // check if the datagrid is already loaded
  492.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  493.         {
  494.             $this->onReloadfunc_get_arg(0) );
  495.         }
  496.         parent::show();
  497.     }
  498.     
  499.     
  500.     //função para carregar as aplicações 'equipamentos'
  501.     public static function onChange($param)
  502.     {
  503.         TTransaction::open('sqlserver');
  504.         $criteria = new TCriteria;
  505.         $criteria->add(new TFilter('empreendimento_id''='$param['empreendimento_id']));
  506.         //$criteria->add(new TFilter('aplicacao', 'like', '%gerador%'));
  507.         
  508.         $repository = new TRepository('ViewEmpreendimentos');
  509.         $aplicacaos $repository->load($criteria);
  510.         
  511.         $options = array();
  512.         $options[] = '' ;
  513.         foreach ($aplicacaos as $aplicacao){
  514.             $options[$aplicacao->id] = $aplicacao->sigla;
  515.         }
  516.         
  517.         //TForm::sendData('form_Vertedouro', $objeto);            
  518.         TCombo::reload('form_search_ValCoig''aplicacao_id'$options);
  519.         
  520.     }
  521.     
  522.     //função para carregar as ocorrencias dos geradores
  523.     public static function onChange2($param)
  524.     {
  525.         
  526.         TTransaction::open('sqlserver');
  527.         $criteria = new TCriteria;
  528.         @$criteria->add(new TFilter('aplicacao_id''='$param['aplicacao_id']));
  529.                 
  530.         $repository = new TRepository('ViewAplicacao');
  531.         $eventos $repository->load($criteria);
  532.         
  533.         $options = array();
  534.         $options[] = '' ;
  535.         foreach ($eventos as $evento){
  536.             $options[$evento->id] = $evento->evento;
  537.         }
  538.         
  539.         //TForm::sendData('form_Vertedouro', $objeto);            
  540.         TCombo::reload('form_search_ValCoig''evento_aplicacao_id'$options);
  541.         
  542.     }
  543.     
  544. }
  545. ?>
EB

Olá Betuel.

Vi que nesse seu código você utiliza combos dinâmicas! Estou enfrentando um problema com a utilização de combos dinâmicas, onde já bati pra todo lado e nunca consegui pra funcionar.

É possível você me dar uma força? Eu já postei o problema aqui no fórum, onde inclusive você fez um comentário lá, mas ainda assim não obtive sucesso...

Este é o link do meu post onde anexei o meu código: www.adianti.com.br/forum/pt/view_1829?tcombo-dinamica

Qualquer coisa pode entrar em contato comigo por email também
email: edilanebzrra@gmail.com