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

Grato pela ajuda !

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 (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. ?>