Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Bom dia comunidade Adianti, Estou com uma pequena dúvida. Tenho um formulário que contém um TDBCombo, gostaria saber como faço para pegar o valor do ID do item selecionado e passar seu valor para outro formulário. Não estou sabendo pegar o valor do campo selecionado no TDBCombo. $categoria = new TDBCombo('categoria', 'bdCardapio', 'CategoriaPrato', 'id', 'nome'); ...
TF
 
Bom dia comunidade Adianti,

Estou com uma pequena dúvida. Tenho um formulário que contém um TDBCombo, gostaria saber como faço para pegar o valor do ID do item selecionado e passar seu valor para outro formulário. Não estou sabendo pegar o valor do campo selecionado no TDBCombo.

$categoria = new TDBCombo('categoria', 'bdCardapio', 'CategoriaPrato', 'id', 'nome');


Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (14)


MG

Tiago

Você deve implementar uma action (onChangeAction).
TF

Marcelo Gomes, vc pode enviar a dica de como implementá-la?
MG

Tiago, segue alguns fragmentos de um código que utilizo:

 
  1. <?php
  2. public function __construct()
  3. {
  4. ....
  5. $cbo_action = new TAction(array($this, 'onChangeAction'));
  6. $centrocustoid->setChangeAction($cbo_action);
  7. .....
  8. }
  9. static function onChangeAction($param)
  10. {
  11. try
  12. {
  13. TApplication::postData('form_funcionario_homeoffice', 'FuncionarioHomeOffice', 'onCarregarGrid');
  14. }
  15. catch (Exception $e)
  16. {
  17. $msg = 'Erro : ' . $e->getCode() . ' - Mensagem : ' . $e->getMessage();
  18. new TMessage('error',$msg);
  19. }
  20. }
  21. ?>
TF

Não entendi seu código. Queria saber se tem como pegar o valor do TDBCombo no próprio __construct, daí passaria seu valor via $action->setParameter para o outro formulário.
MG

Tiago
Vc consegue pegar o valor quando existe uma ação.
Neste caso quando você clica sobre o cbo, aciona-se onChangeAction.
Antes de capturar a informação, existe uma ação de "selecionar"....
Até mesmo programação para desktop é preciso uma ação num componente Combo, checkbox, radio e etc.
TF

Marcelo, eu consegui implementando essa função

public function editaCategoria($param){

$idCategoria['key'] = $param['categoria'];
TApplication::loadPage('CategoriaWindow', 'onEdit', (array) $idCategoria);
}

Pego o valor da categoria e envio via loadPage. O que acha? Será um código elegante?
MG

Tiago
$idCategoria é um TCombo?
TF

Recebe o valor selecionado do TCombo. O pior é q deu certo..kkkkk.
MG

E no "__construct" como você implementou a chamada para editaCategoria()?
TF

Segue código de criação do botão:
//botão add categoria

$addCategoria = new TButton('addCategoria');
$action = new TAction(array($this, 'editaCategoria'));
$addCategoria->setAction(($action));
$addCategoria->setImage('ico_config.png');
$addCategoria->popover = 'true';
$addCategoria->popcontent = 'Configurar categoria';
MG

Tiago

Não entendi. Você tinha um TDBCombo, certo?

Você criou um botão para pegar o valor do TDBCombo após selecioná-lo?

Foi isso?
TF

Isso mesmo, Marcelo Gomes.
Pego seu ID, através do botão, e envio pra uma TWindow.
Estou com um novo problema. Ao enviar, os dados do form pai, são apagados seus dados, ao retornar pra este, simplesmente fechando a janela, seus dados voltam vazios.
MG

Tiago
Posta o código!

Geralmente capturamos o conteúdo do form através do método "getData()" e depois preenchemos o form com "setData()";

 
  1. <?php
  2. ...
  3. $data = $this->form->getData();
  4. .....
  5. $this->form->setData($data);
  6. ?>
TF

Desculpe a demora pra responder. Segue código.

 
  1. <?php
  2. class PratoForm extends Configuracao{
  3. private $form;
  4. private $dataGrid;
  5. private $loaded;
  6. private $imgFoto;
  7. function __construct(){
  8. parent::__construct();
  9. $this->form = new TForm('form_cadastro_cardapio');
  10. $this->form->class = 'tform'; //Classe CSS
  11. $this->form->style = 'width: 710px';
  12. $tabela = new TTable;
  13. $tabela->width = '100%';
  14. $tabela_botoes = new TTable;
  15. $this->form->add($tabela);
  16. $id = new TEntry('id');
  17. $cod = new TEntry('cod');
  18. $nome = new TEntry('nome');
  19. $preco = new TEntry('preco');
  20. $categoria = new TDBCombo('categoria', 'bdCardapio', 'CategoriaPrato', 'id', 'nome');
  21. $cardapio = new TEntry('cardapio');
  22. $nomeImagem = new TFile('imagem');
  23. $dt_cadastro = new TDate('dt_cadastro');
  24. // configuracao de campo
  25. $id->setSize(40);
  26. $id->setEditable(false);
  27. $cod->setSize(50);
  28. $cod->setMask('99999');
  29. $nome->setSize(280);
  30. $preco->setSize(70);
  31. $preco->setNumericMask(2,',','.');
  32. $categoria->setSize(130);
  33. $cardapio->setSize(150);
  34. $cardapio->setEditable(false);
  35. $dt_cadastro->setSize(80);
  36. $dt_cadastro->setEditable(false);
  37. // Titulo do formulario
  38. $row = $tabela->addRow();
  39. $row->class = 'tformtitle';
  40. $cell = $row->addCell(new TLabel('Cadastro de pratos'));
  41. $cell->colspan=2;
  42. //botão add categoria
  43. $addCategoria = new TButton('addCategoria');
  44. $action = new TAction(array('CategoriaWindow', 'onEdit'));
  45. $this->form->setFields(array($categoria));
  46. $addCategoria->setAction(($action));
  47. $addCategoria->setImage('ico_config.png');
  48. $addCategoria->popover = 'true';
  49. $addCategoria->popcontent = 'Configurar categoria';
  50. //adiciona campos da tabela
  51. $tabela->addRowSet(array(new TLabel('ID:'), $id, new TLabel('Código:'), $cod, new TLabel('Nome:'), $nome, new TLabel('Preço:'), $preco));
  52. $tabela->addRowSet(array(new TLabel('Categoria:'), $categoria, $addCategoria, new TLabel('Cardápio:'), $cardapio, new TLabel('Data de cadastro:'), $dt_cadastro));
  53. //CAMPOS IMAGENS
  54. $frame = new TFrame;
  55. $frame->setLegend('<b>Imagem</b>');
  56. $tabela_imagem = new TTable;
  57. $nomeImagem->setSize(200);
  58. // cria botão postar imagem
  59. $postImagem = new TButton('imagem');
  60. $postImagem->setAction(new TAction(array($this, 'onEdit')), 'Postar');
  61. $postImagem->setImage('ico_up.png');
  62. $divImg = new TElement('div');
  63. $this->imgFoto = new TElement('img');
  64. $this->imgFoto->src = "app/imgpratos/churrasco.jpg";
  65. $this->imgFoto->style = "width:300;height:200px";
  66. $this->linka = new TElement('a');
  67. $this->linka->href = "";
  68. $this->linka->add($this->imgFoto);
  69. $divImg->add($this->linka);
  70. $tabela_imagem->addRowSet(array(new TLabel('Imagem'), $nomeImagem, $postImagem, $divImg));
  71. $frame->add($tabela_imagem);
  72. $row = $tabela->addRow();
  73. $row->class = 'tformaction';
  74. $cell = $row->addCell($frame);
  75. $cell->colspan=2;
  76. //FIM CAMPOS IMGAGENS
  77. // cria botão novo
  78. $novoPrato = new TButton('novoPrato');
  79. $novoPrato->setAction(new TAction(array($this, 'onEdit')), 'Novo');
  80. $novoPrato->setImage('ico_new.png');
  81. // cria botões salvar
  82. $salvarPrato = new TButton('save');
  83. $salvarPrato->setAction(new TAction(array($this, 'onSave')), 'Salvar');
  84. $salvarPrato->setImage('ico_save.png');
  85. // cria botão deleta
  86. $deletaPrato = new TButton('deletaCardapio');
  87. $deletaPrato->setAction(new TAction(array($this, 'onDelete')), 'Deletar');
  88. $deletaPrato->setImage('ico_delete.png');
  89. $voltar = new TButton('back');
  90. $voltar->setAction(new TAction(array($this, 'voltar')), 'Voltar');
  91. $voltar->setImage('ico_back.png');
  92. $row = $tabela_botoes->addRow();
  93. $row->addCell($novoPrato);
  94. $row->addCell($salvarPrato);
  95. $row->addCell($deletaPrato);
  96. $row->addCell($voltar);
  97. $row = $tabela->addRow();
  98. $row->class = 'tformaction';
  99. $cell = $row->addCell($tabela_botoes);
  100. $cell->colspan=2;
  101. //Montagem de dataGrid e botões de listagem
  102. $row = $tabela->addRow();
  103. $row->class = 'tformsection';
  104. $row->addCell( new TLabel('<b>Pratos</b>'))->colspan = 2;
  105. $tabelaPrato = new TTable;
  106. $nomePrato = new TEntry('nomePrato');
  107. $nomePrato->setSize(300);
  108. // cria botões buscar
  109. $busca_prato = new TButton('find');
  110. $busca_prato->setAction(new TAction(array($this, 'onSearch')), 'Buscar');
  111. $busca_prato->setImage('ico_find.png');
  112. $tabelaPrato->addRowSet(array(new TLabel('Nome'), $nomePrato, $busca_prato));
  113. $this->dataGrid = new TDataGrid;
  114. $this->dataGrid->setHeight(280);
  115. $codPrato = new TDataGridColumn('cod', 'Código', 'rigth', 60);
  116. $nome_prato = new TDataGridColumn('nome', 'Nome', 'rigth', 440);
  117. $precoPrato = new TDataGridColumn('preco', 'Preço', 'rigth', 100);
  118. $categoriaPrato = new TDataGridColumn('categoria', 'Categoria', 'rigth', 200);
  119. $this->dataGrid->addColumn($codPrato);
  120. $this->dataGrid->addColumn($nome_prato);
  121. $this->dataGrid->addColumn($precoPrato);
  122. $this->dataGrid->addColumn($categoriaPrato);
  123. $action1 = new TDataGridAction(array($this, 'onEdit'));
  124. $action1->setLabel('Edit');
  125. $action1->setImage('ico_edit.png');
  126. $action1->setField('id');
  127. $action2 = new TDataGridAction(array($this, 'onDelete'));
  128. $action2->setLabel('Delete');
  129. $action2->setImage('ico_delete.png');
  130. $action2->setField('id');
  131. $this->dataGrid->addAction($action1);
  132. $this->dataGrid->addAction($action2);
  133. $this->dataGrid->createModel();
  134. $row = $tabelaPrato->addRow();
  135. $row->addCell($this->dataGrid);
  136. $row = $tabela->addRow();
  137. $row->class = 'tformaction';
  138. $cell = $row->addCell($tabelaPrato);
  139. $cell->colspan=2;
  140. $this->form->setFields(array($id, $cod, $nome, $preco, $cardapio, $categoria, $addCategoria, $dt_cadastro, $salvarPrato, $novoPrato, $deletaPrato, $voltar, $postImagem, $nomePrato, $busca_prato));
  141. $vbox = new TVBox;
  142. $vbox->add($this->form);
  143. parent::add($vbox);
  144. }
  145. function onEdit($param){
  146. try{
  147. if (isset($param['key'])){
  148. $key = $param['key'];
  149. TTransaction::open('bdCardapio');
  150. $objeto = new Pratos($key);
  151. //consulta o nome do cardapio através de id vindo de sessao
  152. $rCardapio = new TRepository('Cardapios');
  153. $criterio = new TCriteria;
  154. $idCardapio = TSession::getValue('idCardapio');//pega valor do id de cardapio
  155. TSession::setValue('idPrato', $key); //pega id do cardapio atual
  156. $criterio->add(new TFilter('id', '=', "$idCardapio"));
  157. $cardapios = $rCardapio->load($criterio);
  158. foreach ($cardapios as $cardapio) {
  159. $objeto->cardapio = $cardapio->nome;
  160. }
  161. $objeto->preco = parent::converteFloatReal($objeto->preco);
  162. $imagem = $objeto->imagem;
  163. echo $imagem;
  164. $this->imgFoto->src = "../app/imagemPratos/$imagem.jpg";
  165. $this->linka->href = $this->imgFoto->src;
  166. $this->form->setData($objeto);
  167. TTransaction::close();
  168. }
  169. else{
  170. $key = '';//atribui um vazio ao key antes de ser preenchido pelo $param
  171. if(TSession::getValue('idPrato')){
  172. if (isset($param['key'])){ $key = $param['key'];}
  173. TTransaction::open('bdCardapio');
  174. $objeto = new Pratos($key);
  175. //consulta o nome do cardapio através de id vindo de sessao
  176. $rCardapio = new TRepository('Cardapios');
  177. $criterio = new TCriteria;
  178. $idCardapio = TSession::getValue('idCardapio');//pega valor do id de cardapio
  179. TSession::setValue('idPrato', $key); //pega id do cardapio atual
  180. $criterio->add(new TFilter('id', '=', "$idCardapio"));
  181. $cardapios = $rCardapio->load($criterio);
  182. foreach ($cardapios as $cardapio) {
  183. $objeto->cardapio = $cardapio->nome;
  184. }
  185. //$objeto->preco = parent::converteFloatReal($objeto->preco);
  186. $this->form->setData($objeto);
  187. TTransaction::close();
  188. }
  189. else{
  190. $this->form->clear();
  191. TSession::delValue('idPrato');
  192. TTransaction::open('bdCardapio');
  193. $objeto = new Pratos();
  194. //consulta o nome do cardapio através de id vindo de sessao
  195. $rCardapio = new TRepository('Cardapios');
  196. $criterio = new TCriteria;
  197. $idCardapio = TSession::getValue('idCardapio');
  198. $criterio->add(new TFilter('id', '=', "$idCardapio"));
  199. $cardapios = $rCardapio->load($criterio);
  200. foreach ($cardapios as $cardapio) {
  201. $objeto->cardapio = $cardapio->nome;
  202. }
  203. $this->form->setData($objeto);
  204. TTransaction::close();
  205. }
  206. }
  207. }
  208. catch (Exception $e){
  209. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  210. TTransaction::rollback();
  211. }
  212. }