Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Executar método onSave ao adicionar detalhe Gostaria que os dados adicionados na datagrid de detalhe fosse gravada no banco de dados, sem ter que se clicar no botão salvar. Qual é a forma correta de fazer isso?...
CS
Executar método onSave ao adicionar detalhe  
Gostaria que os dados adicionados na datagrid de detalhe fosse gravada no banco de dados, sem ter que se clicar no botão salvar. Qual é a forma correta de fazer isso?

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


MC

ola, não sei se é a forma correta, mais fizemos dessa forma:


  1. <?php
  2.         $column_confirma->setTransformer( function($value$object$row) {
  3.             $widget2 = new TCombo('confirma' '_' $object->id);
  4.             $widget2->setValue$object->confirma );
  5.             $widget2->addItems(array('S' => 'Sim''N' => 'Não'));
  6.             $widget2->setSize(51);
  7.             $widget2->setFormName('form_FoodReservaList');
  8.             $widget2->setChangeAction( new TAction( array($this'onChangeConfirma')) );
  9.             return $widget2;
  10.         });        
  11. ?>



  1. <?php
  2.     static function onChangeConfirma ($param)
  3.     {
  4.         if ($param['key'] == 'S')
  5.         {
  6.             TTransaction::open('sistema');
  7.             $index  $param['_field_name'];
  8.             $cod_id trim(substr($index,9,30));
  9.             $object = new FoodReserva($cod_idFALSE);
  10.             if ($object->confirma == 'N')
  11.             {
  12.                 $object->id_confirma 0;
  13.                 $object->dt_confirma date("Y-m-d");
  14.                 $object->confirma 'S';
  15.             } // fim if ($object->confirma == 'N')
  16.             $object->save$cod_id );
  17.             TTransaction::close();
  18.         }
  19.         if ($param['key'] == 'N')
  20.         {
  21.             TTransaction::open('sistema');
  22.             $index  $param['_field_name'];
  23.             $cod_id trim(substr($index,9,30));
  24.             $object = new FoodReserva($cod_idFALSE);
  25.             if ($object->confirma == 'S')
  26.             {
  27.                 $object->id_confirma 0;
  28.                 $object->dt_confirma '';
  29.                 $object->confirma 'N';
  30.             } // fim if ($object->confirma == 'N')
  31.             $object->save$cod_id );  
  32.             TTransaction::close();
  33.         }
  34.         TApplication::postData('form_FoodReservaList',__CLASS__,'onReload'); //ATUALIZA PAGINA
  35.     }
  36. ?>


nesse caso especifico, nós estamos apenas gravando um campo na tabela, mais vc pode modificar a ideia e fazer sua própria logica.


CS

Entendi. Nesse caso, você implementa uma combo na datagrid e grava no banco de acordo com a seleção. Gostaria de gravar no banco ao clicar em adicionar na datragrid de detalhes. Algumas vezes os usuários esquecem de clicar em salvar e as informações da datagrid de detalhes se perdem. Obrigado pela resposta, Marcelo.
MC

Nesse projeto, que fizemos, teria que dessa forma.

Mais tambem vou precisar fazer essa implementação em um projeto futuro.

Ou seja, nao deixar o usuario perder os dados da tela....

FS

Nesse caso eu prefiro criar o registro 'insert'
do registro mestre 'pai' e abro com o onEdit
passando o ID.. dai já fica disponível o ID
pai para adicionar e salvar no banco os itens.
Simples e funcional.
MC

Fabricio, terias um exemplo ?
FS

Crie um botão de ação INCLUIR com o método desejado.. exemplo:
public function onIncluir($param = null) { try { TTransaction::open(self::$database); $pediddo = new Pedido(); $pediddo->data_pedido = date('Y-m-d'); $pediddo->store(); TApplication::loadPage('PedidoForm', 'onEdit', ['key' => $pediddo->id]); TTransaction::close(); } catch (Exception $e) { new TMessage('error', $e->getMessage()); TTransaction::rollback(); } }


Editado 22/08/2022 (há 1 ano) - Ver alterações