Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Botao no Form Boa Tarde Estou montando um GridScrollView com Checkbox no Grid, ate ai tudo bem mas quando coloco um botao para pegar as colunas que esta selecionadas pelo checkbox esta apresentando um erro. Segue meu codigo ...
IL
Botao no Form  
Fechado
Boa Tarde

Estou montando um GridScrollView com Checkbox no Grid, ate ai tudo bem mas quando coloco um botao para pegar as colunas que esta selecionadas pelo checkbox esta apresentando um erro.
Segue meu codigo

  1. <?php
  2. /**
  3.  * DatagridScrollView
  4.  *
  5.  * @version    1.0
  6.  * @package    samples
  7.  * @subpackage tutor
  8.  * @author     Pablo Dall'Oglio
  9.  * @copyright  Copyright (c) 2006-2014 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10.  * @license    http://www.adianti.com.br/framework-license
  11.  */
  12. class DatagridScrollView extends TPage
  13. {
  14.     private $datagrid;
  15.     
  16.     public function __construct()
  17.     {
  18.         parent::__construct();
  19.         
  20.          $this->form = new TForm;
  21.         
  22.         
  23.         // creates one datagrid
  24.         $this->datagrid = new TDataGrid;
  25.         
  26.         
  27.         
  28.      //   $this->form->add($this->datagrid);
  29.         
  30.         // make scrollable and define height
  31.         $this->datagrid->setHeight(300);
  32.         $this->datagrid->makeScrollable();
  33.         
  34.         // create the datagrid columns
  35.         $check      = new TDataGridColumn('check',    'check',    'right',    70);
  36.         $code       = new TDataGridColumn('code',    'Code',    'right',    70);
  37.         $name       = new TDataGridColumn('name',    'Name',    'left',   180);
  38.         $address    = new TDataGridColumn('address''Address''left',   180);
  39.         $telephone  = new TDataGridColumn('fone',    'Phone',   'left'160);
  40.         
  41.         // add the columns to the datagrid
  42.         $this->datagrid->addColumn($check);        
  43.         $this->datagrid->addColumn($code);
  44.         $this->datagrid->addColumn($name);
  45.         $this->datagrid->addColumn($address);
  46.         $this->datagrid->addColumn($telephone);
  47.         
  48.         // creates the datagrid model
  49.         $this->datagrid->createModel();
  50.         
  51.         
  52.         // creates the action button
  53.         $button1=new TButton('action1');
  54.         // define the button action
  55.         $button1->setAction(new TAction(array($this'onSave')), 'Save');
  56.         $button1->setImage('ico_save.png');
  57.         
  58.         
  59.     //    $this->formFields[] = $button1;
  60.     //    $this->form->setFields($this->formFields);
  61.                 
  62.         
  63.         
  64.         // wrap the page content using vertical box
  65.         $vbox = new TVBox;
  66.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  67.         $vbox->add($this->datagrid);       
  68.  
  69.         $vbox->add($this->form);
  70.         $vbox->add($button1);  
  71.             
  72.         parent::add($vbox);
  73.     }
  74.     
  75.     /**
  76.      * Load the data into the datagrid
  77.      */
  78.     function onReload()
  79.     {
  80.         $this->datagrid->clear();
  81.         
  82.         for ($n=1$n<=40$n++)
  83.         {
  84.             // add an regular object to the datagrid
  85.             $item = new StdClass;
  86.             $item->check  = new TCheckButton('check1');
  87.             $item->check->setIndexValue('on');                   
  88.             $item->code     $n;
  89.             $item->name     'Person name';
  90.             $item->address  'Person address';
  91.             $item->fone     '1111-1111';
  92.             $this->datagrid->addItem($item);        
  93.            
  94.             
  95.             
  96.         }
  97.     }
  98.       public function onSave($param)
  99.     {
  100.         $data $this->form->getData(); // optional parameter: active record class
  101.         
  102.         // put the data back to the form
  103.         $this->form->setData($data);
  104.         
  105.         // creates a string with the form element's values
  106.         $message 'Check 1 : ' $data->check1 '<br>';
  107.         $message.= 'Check 2 : ' $data->check2 '<br>';
  108.         $message.= 'Check 3 : ' $data->check3 '<br>';
  109.         $message.= 'Check 4 : ' $data->check4 '<br>';
  110.         
  111.         // show the message
  112.         new TMessage('info'$message);
  113.     }
  114.     /**
  115.      * shows the page
  116.      */
  117.     function show()
  118.     {
  119.         $this->onReload();
  120.         parent::show();
  121.     }
  122. }
  123. ?>

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


PD

Oi Ivan,

Você deve ter se baseado neste exemplo:
www.adianti.com.br/framework_files/tutor/index.php?class=DatagridChe

Entretanto você eliminou e comentou linhas de código fundamentais para o funcionamento adequado ;-) Eu explico...

Quando você monta alguma tela com o TForm, precisa adicionar conteúdo à ele, o que é algo somente gráfico. Mas por trás disso tudo, logicamente o TForm precisa saber quais campos ele está manipulando, e é aí que entra o setFields(), o setFields() diz para o TForm quais campos ele irá manipular. Você deve passar todos os campos do formulário e até mesmo o próprio botão para o setFields(). Como nesse caso você cria campos dentro de um loop (onReload), deverá acrescentar cada campo criado no loop também ao setFields(). Por isso o exemplo tinha um vetor chamado $this->formFields. Ele não deve ser removido, pois sem ele, o formulário não postará nada...

Esta operação só não é necessária ao usarmos o TQuickForm, pois ele já faz isso internamente, mas não é o caso nesse exemplo.

Percebi isso, pois ao rodar o seu exemplo, o erro logo apareceu:
You must pass the TButton (Save) as a parameter to TForm::setFields()

Att,
Pablo