{parts/gtag_head.html} {parts/gtag_body.html}
Mês do Programador

Vamos comemorar juntos o seu mês.
Aproveite condições especiais.

Cursos, combos e assinaturas com desconto exclusivo para comemorar o Dia do Programador. Tempo limitado.

Promoção válida de 14/09 à 25/09

De 30% Até50% OFF
Como pegar dados do DataGrid Olá, Estou precisando de ajuda para pegar dados do datagrid e gravar em banco de dados... quando uso botão salvar não aparece nada ... já olhei outros post e nada ... não consigo entender a lógica do TdataGrid. Segue código abaixo: ...
MR
Como pegar dados do DataGrid  
Olá,

Estou precisando de ajuda para pegar dados do datagrid e gravar em banco de dados... quando uso botão salvar não aparece nada ... já olhei outros post e nada ... não consigo entender a lógica do TdataGrid.

Segue código abaixo:

 
  1. <?php
  2. use Adianti\Widget\Base\TScript;
  3. use Adianti\Widget\Container\TPanelGroup;
  4. use Adianti\Widget\Datagrid\TDataGrid;
  5. use Adianti\Widget\Datagrid\TDataGridColumn;
  6. use Adianti\Widget\Dialog\TMessage;
  7. use Adianti\Widget\Form\TButton;
  8. use Adianti\Widget\Form\TEntry;
  9. use Adianti\Widget\Form\TNumeric;
  10. use Adianti\Wrapper\BootstrapDatagridWrapper;
  11. use Adianti\Wrapper\BootstrapFormBuilder;
  12. class ReposicaoProduto extends TPage
  13. {
  14. protected $form, $datagrid;
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. $this->setTargetContainer('adianti_right_panel');
  19. $this->form = new BootstrapFormBuilder('form_Sale_View');;
  20. $this->form->addHeaderActionLink( _t('Close'), new TAction([__CLASS__, 'onClose'], ['static'=>'1']), 'fa:times red');
  21. $descricao = new TEntry('Nome');
  22. $descricao->setSize('100%');
  23. $this->form->addFields([new TLabel('Digite produto')], [$descricao]);
  24. $this->form->addAction('Buscar', new TAction([$this, 'onSearch']), 'fa:search blue');
  25. $this->form->addAction('Salvar', new TAction([$this, 'onsave']), 'fa:save green');
  26. // DataGrid
  27. $this->datagrid = new TDataGrid;
  28. $this->datagrid->style = 'width:100%';
  29. $this->datagrid->disableDefaultClick();
  30. $this->datagrid->datatable = true;
  31. $codigo = new TDataGridColumn('codigo', 'Código', 'left','10%');
  32. $nome = new TDataGridColumn('nome', 'Nome', 'left','60%') ;
  33. $preco = new TDataGridColumn('preco', 'Custo', 'left','20%');
  34. $quantidade = new TDataGridColumn('quantidade', 'Qtd Solicitada', 'center', '10%');
  35. $quantidade->setDataProperty('style','font-weight: bold');
  36. $quantidade->setTransformer( function($solicitado, $object, $row) {
  37. $widget = new TEntry('solicitado_' . $object->id);
  38. $widget->setValue( $solicitado );
  39. $widget->setSize(50);
  40. $widget->setFormName('Form_seach_produt');
  41. return $widget;
  42. });
  43. $formata_valor = function($valor, $objeto, $row) {
  44. if (is_numeric($valor))
  45. {
  46. return 'R$ ' . number_format($valor, 2, ',', '.');
  47. }
  48. return $valor;
  49. };
  50. $preco->setTransformer( $formata_valor );
  51. // add the columns to the DataGrid
  52. $this->datagrid->addColumn($codigo);
  53. $this->datagrid->addColumn($nome);
  54. $this->datagrid->addColumn($preco);
  55. $this->datagrid->addColumn($quantidade);
  56. // creates the datagrid model
  57. $this->datagrid->createModel();
  58. // wrap the page content using vertical box
  59. $vbox = new TVBox;
  60. $vbox->style = 'width: 100%';
  61. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  62. $vbox->add($this->form);
  63. $vbox->add($this->datagrid);
  64. parent::add($vbox);
  65. }
  66. public function onsave($param)
  67. {
  68. // Aqui Gostaria de pegar os dados do Datagrid, fazer Foreach(loop) e Gravar em uma tabela
  69. $items = $this->datagrid->getitems();
  70. var_dump($items);
  71. var_dump($param);
  72. //return;
  73. }
  74. public function onClear()
  75. {
  76. $this->form->clear( TRUE );
  77. }
  78. public function onSearch($param)
  79. {
  80. try
  81. {
  82. $this->datagrid->clear(true);
  83. $obj = new stdClass;
  84. $obj->nome =$param['Nome'];
  85. if (empty($obj->nome))
  86. {
  87. new TMessage('Info','precisa informar nome do produto');
  88. return;
  89. }
  90. $url = 'produtos.pesquisa.php';
  91. $token = 'xxxx';
  92. $data = "token=$token&pesquisa=$obj->nome&formato=JSON";
  93. $retorno = json_decode(ReposicaoLista::enviarREST($url, $data),true);
  94. if ($retorno['retorno']['status_processamento'] == 1){
  95. new TMessage('error','Token invalido');
  96. return;
  97. }
  98. if ($retorno['retorno']['status_processamento'] == 2){
  99. new TMessage('info','A Consulta não retornou registros');
  100. return;
  101. }
  102. if ($retorno['retorno']['status_processamento'] == 3){
  103. $pesq = ($retorno['retorno']['produtos']);
  104. foreach($pesq as $key => $value){
  105. $item = new StdClass;
  106. $item->id = $value['produto']['id'];
  107. $item->codigo = $value['produto']['codigo'] ;
  108. $item->nome = $value['produto']['nome'] ;
  109. $item->preco = $value['produto']['preco_custo'] ;
  110. $this->datagrid->addItem($item);
  111. }
  112. }
  113. }
  114. catch (Exception $e)
  115. {
  116. // shows the exception error message
  117. new TMessage('error', $e->getMessage());
  118. }
  119. }
  120. public static function onClose()
  121. {
  122. TScript::create("Template.closeRightPanel()");
  123. }
  124. }
  125. ?>

Grato pela ajuda !

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


NR

Quando você clica no salvar(ou executa qualquer ação), todo o código é processado novamente. No caso do salvar, duas funções vão ser executadas: a construct e depois a onSave. Como a grid está sendo preenchida pela função onSearch(que não está sendo chamada), a função getItems não vai retornar nada dentro da onSave.
Você pode tentar chamar a onSearch dentro da onSave, antes de pegar os itens da grid. Ex:
 
  1. <?php
  2. public function onsave($param)
  3. {
  4. $this->onSearch($param);
  5. $items = $this->datagrid->getitems();
  6. ....
  7. ?>