Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Resposta da procura (TSeekButton) para TCheckButton e TRadioGrou Boa tarde pessoal! Gostaria de saber se existe alguma forma de após realizar a pesquisa utilizando um TSeekButton, enviar a resposta ($object) de forma que os TCheckButton e TRadioGroup sejam alterados. Com os TEntry funciona mas com estes objetos não está funcionando para mim. Obrigado!...
MS
Resposta da procura (TSeekButton) para TCheckButton e TRadioGrou  
Fechado
Boa tarde pessoal! Gostaria de saber se existe alguma forma de após realizar a pesquisa utilizando um TSeekButton, enviar a resposta ($object) de forma que os TCheckButton e TRadioGroup sejam alterados. Com os TEntry funciona mas com estes objetos não está funcionando para mim.
Obrigado!

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


AS

posta o codigo
MS

Na verdade o problema é que ele não está gravando valores de TCheckButton. Acredito que esta função não está implementada no framework, seria isso mesmo? Abaixo segue o código gerado automaticamente pelo Adianti Studio Pro.

  1. <?php
  2. /**
  3.  * tmoduloForm Registration
  4.  * @author  Mailson
  5.  */
  6. class tmoduloForm extends TPage
  7. {
  8.     protected $form// form
  9.     protected $notebook;
  10.     
  11.     /**
  12.      * Class constructor
  13.      * Creates the page and the registration form
  14.      */
  15.     function __construct()
  16.     {
  17.         parent::__construct();
  18.         
  19.         // creates the notebook
  20.         $this->notebook = new TNotebook;
  21.         $this->notebook->setSize(500300);
  22.         
  23.         $scroll = new TScroll;
  24.         $scroll->setSize(490290);
  25.         $scroll->setTransparency(TRUE);
  26.         
  27.         // creates the table container
  28.         $table = new TTable;
  29.         
  30.         // creates the form
  31.         $this->form = new TForm('form_tmodulo');
  32.         $this->notebook->appendPage(_t('Data'), $scroll);
  33.         $scroll->add($table);
  34.         
  35.         // add the notebook inside the form
  36.         $this->form->add($this->notebook);
  37.         // create the form fields
  38.         $id                             = new TEntry('id');
  39.         $Codigo                         = new TEntry('Codigo');
  40.         $Descricao                      = new TEntry('Descricao');
  41.         $DispPara                       = new TEntry('DispPara');
  42.         $Status                         = new TCheckButton('Ativo');
  43.         // define the sizes
  44.         $id->setSize(100);
  45.         $Codigo->setSize(200);
  46.         $Descricao->setSize(200);
  47.         $DispPara->setSize(200);
  48.         $Status->setSize(200);
  49.         // validations
  50.         $id->addValidation('id', new TRequiredValidator);
  51.         // add a row for the field id
  52.         $row=$table->addRow();
  53.         $row->addCell(new TLabel('id:'));
  54.         $row->addCell($id);
  55.         // add a row for the field Codigo
  56.         $row=$table->addRow();
  57.         $row->addCell(new TLabel('Codigo:'));
  58.         $row->addCell($Codigo);
  59.         // add a row for the field Descricao
  60.         $row=$table->addRow();
  61.         $row->addCell(new TLabel('Descricao:'));
  62.         $row->addCell($Descricao);
  63.         // add a row for the field DispPara
  64.         $row=$table->addRow();
  65.         $row->addCell(new TLabel('DispPara:'));
  66.         $row->addCell($DispPara);
  67.         // add a row for the field Status
  68.         $row=$table->addRow();
  69.         $row->addCell(new TLabel('Status:'));
  70.         $row->addCell($Status);
  71.         // create an action button (save)
  72.         $save_button=new TButton('save');
  73.         // define the button action
  74.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  75.         $save_button->setImage('ico_save.png');
  76.         $this->form->setFields(array($id,$Codigo,$Descricao,$DispPara,$Status,$save_button));
  77.         
  78.         $container = new TTable;
  79.         $container->addRow()->addCell($this->form);
  80.         $container->addRow()->addCell($save_button);
  81.         
  82.         // add the form to the page
  83.         parent::add($container);
  84.     }
  85.     /**
  86.      * method onSave()
  87.      * Executed whenever the user clicks at the save button
  88.      */
  89.     function onSave()
  90.     {
  91.         try
  92.         {
  93.             // open a transaction with database 'datalan'
  94.             TTransaction::open('datalan');
  95.             
  96.             // get the form data into an active record tmodulo
  97.             $object $this->form->getData('tmodulo');
  98.             
  99.             // form validation
  100.             $this->form->validate();
  101.             
  102.             // stores the object
  103.             $object->store();
  104.             
  105.             // fill the form with the active record data
  106.             $this->form->setData($object);
  107.             
  108.             // close the transaction
  109.             TTransaction::close();
  110.             
  111.             // shows the success message
  112.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  113.             // reload the listing
  114.         }
  115.         catch (Exception $e// in case of exception
  116.         {
  117.             // shows the exception error message
  118.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  119.             
  120.             // undo all pending operations
  121.             TTransaction::rollback();
  122.         }
  123.     }
  124.     
  125.     /**
  126.      * method onEdit()
  127.      * Executed whenever the user clicks at the edit button da datagrid
  128.      */
  129.     function onEdit($param)
  130.     {
  131.         try
  132.         {
  133.             if (isset($param['key']))
  134.             {
  135.                 // get the parameter $key
  136.                 $key=$param['key'];
  137.                 
  138.                 // open a transaction with database 'datalan'
  139.                 TTransaction::open('datalan');
  140.                 
  141.                 // instantiates object tmodulo
  142.                 $object = new tmodulo($key);
  143.                 
  144.                 // fill the form with the active record data
  145.                 $this->form->setData($object);
  146.                 
  147.                 // close the transaction
  148.                 TTransaction::close();
  149.             }
  150.             else
  151.             {
  152.                 $this->form->clear();
  153.             }
  154.         }
  155.         catch (Exception $e// in case of exception
  156.         {
  157.             // shows the exception error message
  158.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  159.             
  160.             // undo all pending operations
  161.             TTransaction::rollback();
  162.         }
  163.     }
  164. }
  165. ?>
AS

então eu não uso o stuio não fasso na mão mesmo mas tenta ver se ele peg os dados do form usando isso

  1. <?php
  2. function onSave($param){
  3. $frm $this->form->getData();
  4. new TMessage('info',$frm->Ativo);
  5. }
  6. ve se mostra alguma coisa na msg de erro
MS

Obrigado pelo apoio Alexandre. Com esse código, se "Status" estiver marcado aparece "on" senão fica em branco, porém no banco sempre grava null. Bem...com alguns "if" no "onSave" e "onEdit" eu consegui fazer essa parte funcionar, ficou gravando, beleza. Mas então se eu colocar uma busca (TSeekButton) no "id" para carregar todo o form inclusive o "Status" que é o check também terei que fazer uma função para substituir o "TForm::sendData()", certo? Concluí isso porque no sendData temos apenas um
  1. <?php
  2. $script->add" try { document.{$form_name}.{$field}_{$property}.value = '{$data}'; } catch (e) { } " );
  3. ?>

isso significa que é considerado apenas ".value" para "text", para "check" seria ".check".
AS

então é um seguinte, quando ele fica em branco manda null para o banco, voce deveria ter deixando um valor default no banco caso o valor seja nulo, você pode fazer a função edit normal.

tenta ai qualquer coisa cola o codigo aqui.

abraços
MS

A parte do banco de dados ficou certinho. Mas na parte da consulta por um TSeekButton eu tive que modificar a função TForm::sendData() para carregar também o "checkbutton". Apenas modifiquei o script e adicionei um teste para chekcbox. Funcionou certinho.
  1. <?php
  2. //Mailson Datalan - Alterado para também carregar checkboxes
  3. $script->add("try { if (document.{$form_name}.{$field}.getAttribute('type') == 'checkbox') " .
  4. "document.{$form_name}.{$field}.checked = {$this->nvl($value)}; " .
  5. "else " .
  6. "document.{$form_name}.{$field}.value = '{$value}'; " .
  7. "} catch (e) { } "
  8. );
  9. ?>
PD

Oi Mailson,

Estou implementando algumas coisas a respeito para a próxima versão.
Realmente com TCheckGroup ainda não tinha utilizado.
Vou analisar seu código e fazer alguns testes.
Se tudo estiver ok, será uma contribuição bem vinda :-)

abraços,
Pablo
AT

Olá Pessoal,

Estou com o mesmo problema do Mailson, porém não consegui resolver ainda por ter menos experiencia com web, o componente do framework TCheckButton não trabalha corretamente com banco de dados, tenho dois campos em meu TPage que são:
  1. <?php
  2. $cad_usuarios = new TCheckButton('cad_usuarios');
  3. $cad_perfis   = new TCheckButton('cad_perfis');
  4. ?>


Quando checados eles gravam TRUE no meu campo no banco de dados PostgreSQL, campo do tipo Boolean e quando desmarcados o campo fica VAZIO, porem não consigo replicar isso em tela! Ou seja, no meu evento onEdit quando o usuário clica em um registro na grid eu gostaria de atualizar os meus checks porem não acontece de forma automática, acho que o framework não trata isso, alterei o meu código de TForm::sendData alterando o script de JS para o do Mailson e chamando o mesmo em função externa, a chama esta no onEdit:

  1. <?php
  2.   setValue_cad_usuarios($object->cad_usuarios);
  3.   setValue_cad_perfis($object->cad_perfis);
  4. ?>


e a função é a:

  1. <?php
  2. function setValue_cad_usuarios($param)
  3. {
  4.     $obj = new StdClass;
  5.     $obj->cad_usuarios $param;
  6.     TForm::sendData('form_Perfil'$obj);
  7. }
  8. function setValue_cad_perfis($param)
  9. {
  10.     $objp = new StdClass;
  11.     $objp->cad_perfis $param;
  12.     TForm::sendData('form_Perfil'$objp);
  13. }
  14. ?>


Vocês podem me ajudar?

Obrigado
PD

Oi Adriano,

Em primeiro lugar os componentes TCheckButton e TRadioButton, não foram projetados para serem usados diretamente em um formulário, mas para serem usados dentro de um TCheckGroup ou TRadioGroup. Não faz muito sentido usar somente 1 check ou somente 1 radio. Pense um usar então uma combo com opções Sim/Não, ou um RadioGroup. Neste caso em que você precisa mudar os valores via ajax, sugiro usar TCombo.

Aqui tem um exemplo de como alterar os valores de uma combo usando o TForm::sendData():
www.adianti.com.br/doc-framework-Presentation-Forms-FormInteractions

Att,
Pablo