Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Datagrid não está sendo populada quando vou editar um registro Pessoal preciso de um help. Criei um formulário onde no mesmo eu cadastro uma categoria e suas respectivas subcategorias em uma datagrid. Quando eu clico em salvar, salva com sucesso no banco e seta as informações no formulário. O problema está quando vou editar um registro! O campo ID e Categoria vem preenchidos, mas as subcategorias não traz... Vou enviar um print da tela e o códi...
RC
Datagrid não está sendo populada quando vou editar um registro  
Fechado
Pessoal preciso de um help.

Criei um formulário onde no mesmo eu cadastro uma categoria e suas respectivas subcategorias em uma datagrid.
Quando eu clico em salvar, salva com sucesso no banco e seta as informações no formulário. O problema está quando vou editar um registro! O campo ID e Categoria vem preenchidos, mas as subcategorias não traz...

Vou enviar um print da tela e o código fonte do método onEdit do formulário e o seu respectivo model.

Obs: Peguei este exemplo do controller SystemUserForm do template ERPII...

  1. <?php 
  2.     function onEdit($param) {
  3.          
  4.         try {
  5.             if (isset($param['key'])) {
  6.                 // get the parameter $key
  7.                 $key $param['key'];
  8.                 
  9.                 TTransaction::open('permission');
  10.                
  11.                 $object = new Categoria($key);
  12.                 
  13.                 $object->programs $object->getEstoqueCategoriaSubcategorias();
  14.                 //var_dump($object); die();                
  15.                 $this->form->setData($object);
  16.                 // close the transaction
  17.                 TTransaction::close();
  18.             } else {
  19.                 $this->form->clear();
  20.             }
  21.         } catch (Exception $e) {            
  22.             new TMessage('error''<b>Error</b> ' $e->getMessage());           
  23.             TTransaction::rollback();
  24.         }
  25.     }
  26. ?>


Model Categoria:
  1. <?php
  2. /**
  3.  * Categoria Active Record
  4.  * @author  <Ricelli Carvalho>
  5.  */
  6. class Categoria extends TRecord
  7. {
  8.     const TABLENAME 'estoque_categoria';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.         
  12.     private $estoque_categoria_subcategorias = array();
  13.     
  14.     public function __construct(1566 NULL)
  15.     {
  16.         parent::__construct(1566);             
  17.         parent::addAttribute('respcadastro');
  18.         parent::addAttribute('datacadastro');
  19.         parent::addAttribute('respalteracao');
  20.         parent::addAttribute('dataalteracao');
  21.         parent::addAttribute('categoria');   
  22.        
  23.     }
  24.     
  25.     public function addEstoqueCategoriaSubcategoria(Subcategoria $object)
  26.     {
  27.         //var_dump($object);        die();
  28.         $this->estoque_categoria_subcategorias[] = $object;
  29.     }
  30.     
  31.     public function getEstoqueCategoriaSubcategorias()
  32.     {
  33.         return $this->estoque_categoria_subcategorias;       
  34.     }
  35.     
  36.         /**
  37.      * Reset aggregates
  38.      */
  39.     public function clearParts()
  40.     {        
  41.         $this->estoque_categoria_subcategorias = array();
  42.     }
  43.     
  44.     
  45.     /**
  46.      * Load the object and its aggregates
  47.      * @param 1566 object ID
  48.      */
  49.     public function load(1566)
  50.     {
  51.         // load the related System_user_program objects
  52.         $repository = new TRepository('CategoriaSubcategoria');
  53.         $criteria = new TCriteria;
  54.         $criteria->add(new TFilter('estoque_categoria_id''='1566));
  55.         //$system_user_system_user_programs = $repository->load($criteria);
  56.         $estoque_categoria_estoque_categoria_subcategorias $repository->load($criteria);
  57.         if ($estoque_categoria_estoque_categoria_subcategorias)
  58.         {
  59.             foreach ($estoque_categoria_estoque_categoria_subcategorias as $estoque_categoria_estoque_categoria_subcategoria)
  60.             {
  61.                 $estoque_categoria_subcategoria = new Subcategoria$estoque_categoria_estoque_categoria_subcategoria->system_program_id );
  62.                 $this->addEstoqueCategoriaSubcategoria($estoque_categoria_subcategoria);
  63.             }
  64.         }
  65.     
  66.         // load the object itself
  67.         return parent::load(1566);
  68.     }
  69.     
  70.         /**
  71.      * Store the object and its aggregates
  72.      */
  73.     public function store()
  74.     {
  75.         // store the object itself
  76.         parent::store();
  77.         $criteria = new TCriteria;
  78.         $criteria->add(new TFilter('estoque_categoria_id''='$this->id));
  79.         $repository = new TRepository('CategoriaSubcategoria');
  80.         $repository->delete($criteria);
  81.         // store the related System_userSystem_user_program objects
  82.         if ($this->estoque_categoria_subcategorias)
  83.         {
  84.             foreach ($this->estoque_categoria_subcategorias as $estoque_categoria_subcategoria)
  85.             {
  86.                 $estoque_categoria_estoque_categoria_subcategoria = new CategoriaSubcategoria;
  87.                 $estoque_categoria_estoque_categoria_subcategoria->estoque_subcategoria_id $estoque_categoria_subcategoria->id;
  88.                 $estoque_categoria_estoque_categoria_subcategoria->estoque_categoria_id $this->id;
  89.                 $estoque_categoria_estoque_categoria_subcategoria->store();
  90.             }
  91.         }
  92.     }
  93.     
  94.         /**
  95.      * Delete the object and its aggregates
  96.      * @param 1566 object ID
  97.      */
  98.     public function delete(1566 NULL)
  99.     {
  100.         // delete the related System_userSystem_user_program objects
  101.         1566 = isset(1566) ? 1566 $this->id;
  102.         $repository = new TRepository('CategoriaSubcategoria');
  103.         $criteria = new TCriteria;
  104.         $criteria->add(new TFilter('estoque_categoria_id''='1566));
  105.         $repository->delete($criteria);
  106.         
  107.     
  108.         // delete the object itself
  109.         parent::delete(1566);
  110.     }
  111.     
  112.         /**
  113.      * Return the programs the user has permission to run
  114.      */
  115.     public function getPrograms()
  116.     {
  117.         $subcategorias = array();
  118.                       
  119.         foreach( $this->getEstoqueCategoriaSubcategorias() as $subc )
  120.         {
  121.             $subcategorias[$subc->subcategoria] = true;
  122.         }
  123.         
  124.         return $subcategorias;
  125.     }
  126. }
  127. ?>

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


FC

Oi Ricelli

Não é datagrid é multifield poste o código de sua classe control, no model falta o private $subcategorias = array();
RC

Obrigado Felipe Cortez, pela disposição em querer ajudar-me a solucionar esse problema.

Vou postar logo abaixo o código da minha classe control.

Você falou que no meu model Categoria falta o
private $subcategorias = array();
. Em que lugar do model devo colocar esse código. E onde o mesmo será utilizado, não entendi?

Classe control: CategoriaFormView

  1. <?php
  2. /**
  3.  * CategoriaFormView Control
  4.  * @author  <Ricelli M. Carvalho>
  5.  */
  6. class CategoriaFormView extends TPage {
  7.     protected $form
  8.     function __construct() {
  9.         parent::__construct();
  10.         $this->form = new TForm('form_Categoria');
  11.         $this->form->class 'tform';
  12.         
  13.         $table = new TTable;
  14.         $table->style 'width: 100%';
  15.         $table->addRowSet(new TLabel('Categorias'), '''''')->class 'tformtitle';
  16.       
  17.         $this->form->add($table);
  18.         $frame_programs = new TFrame(NULL280);
  19.         $frame_programs->setLegend('Subcategorias');
  20.         $frame_programs->style .= ';margin: 15px';
  21.         // create the form fields
  22.         $id = new TEntry('id');
  23.         $categoria = new TEntry('categoria');
  24.         $multifield_programs = new TMultiField('programs');
  25.         $program_id = new  ">TDBSeekButton('program_id''permission''form_Categoria''Subcategoria''subcategoria''programs_id''programs_name');
  26.         $program_name = new TEntry('program_name');
  27.         $scroll = new TScroll;
  28.         $scroll->setSize(290230);
  29.         //$scroll->add( $groups );        
  30.         $frame_programs->add($multifield_programs);
  31.         // define the sizes
  32.         $id->setSize(100);
  33.         $categoria->setSize(200);
  34.         $multifield_programs->setHeight(140);
  35.         // outros
  36.         $id->setEditable(false);
  37.         $program_name->setEditable(false);
  38.         // validations
  39.         $categoria->addValidation('categoria', new TRequiredValidator);        
  40.         $program_id->setSize(50);
  41.         $program_name->setSize(300);
  42.         // configuracoes multifield
  43.         $multifield_programs->setClass('Subcategoria');
  44.         $multifield_programs->addField('id''ID'$program_id60);
  45.         $multifield_programs->addField('name''Subcategoria'$program_name380);
  46.         $multifield_programs->setOrientation('horizontal');
  47.         // add a row for the field id
  48.         $table->addRowSet(new TLabel('ID:'), $id);
  49.         $table->addRowSet(new TLabel('Categoria' ': '), $categoria);
  50.         $row $table->addRow();
  51.         $cell $row->addCell($frame_programs);
  52.         $cell->colspan 2;
  53.         // create an action button (save)
  54.         $save_button = new TButton('save');
  55.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  56.         $save_button->setImage('ico_save.png');
  57.         // create an new button (edit with no parameters)
  58.         $new_button = new TButton('new');
  59.         $new_button->setAction(new TAction(array($this'onEdit')), _t('New'));
  60.         $new_button->setImage('ico_new.png');
  61.         $list_button = new TButton('list');
  62.         $list_button->setAction(new TAction(array('CategoriaDataGrid''onReload')), _t('Back to the listing'));
  63.         $list_button->setImage('ico_datagrid.png');
  64.         // define the form fields
  65.         $this->form->setFields(array($id$categoria$multifield_programs$save_button$new_button$list_button));
  66.         $buttons = new THBox;
  67.         $buttons->add($save_button);
  68.         $buttons->add($new_button);
  69.         $buttons->add($list_button);
  70.         $row $table->addRow();
  71.         $row->class 'tformaction';
  72.         $cell $row->addCell($buttons);
  73.         $cell->colspan 4;
  74.         $container = new TTable;
  75.         $container->style 'width: 80%';
  76.         $container->addRow()->addCell(new TXMLBreadCrumb('menu.xml''CategoriaDataGrid'));
  77.         $container->addRow()->addCell($this->form);
  78.         // add the form to the page
  79.         parent::add($container);
  80.     }
  81.     function onSave() {
  82.         try {            
  83.             TTransaction::open('permission');
  84.            
  85.             $object $this->form->getData('Categoria');
  86.             $this->form->validate();
  87.                                     
  88.             if ($object->id) {
  89.                 $object->respalteracao TSession::getValue('username');
  90.                 $object->dataalteracao date("Y-m-d");
  91.             } else {
  92.                 $object->datacadastro date("Y-m-d");
  93.                 $object->respcadastro TSession::getValue('username');
  94.                 $object->respalteracao TSession::getValue('username');
  95.                 $object->dataalteracao date("Y-m-d");
  96.             }
  97.             
  98.             if ($object->programs) {                
  99.                 foreach ($object->programs as $program) {
  100.                     //var_dump($program); die();
  101.                     $object->addEstoqueCategoriaSubcategoria($program);
  102.                 }
  103.             } else {
  104.                 var_dump("Não entrou!");
  105.                 die();
  106.             }
  107.             $object->store(); 
  108.             $this->form->setData($object);
  109.             TTransaction::close();
  110.             
  111.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  112.            
  113.         } catch (Exception $e) { 
  114.      
  115.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  116.            
  117.             TTransaction::rollback();
  118.         }
  119.     }
  120.     function onEdit($param) {
  121.         try {
  122.             if (isset($param['key'])) {
  123.                 
  124.                 $key $param['key'];
  125.                 TTransaction::open('permission');
  126.           
  127.                 $object = new Categoria($key);
  128.                 $object->programs $object->getEstoqueCategoriaSubcategorias();
  129.                 
  130.                 $this->form->setData($object);
  131.                
  132.                 TTransaction::close();
  133.             } else {
  134.                 $this->form->clear();
  135.             }
  136.         } catch (Exception $e) { 
  137.            
  138.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  139.           
  140.             TTransaction::rollback();
  141.         }
  142.     }
  143. }
  144. ?>


Vou postar também o model CategoriaSubcategoria, que faz a relação entre a tabela Categoria e subcategoria:
  1. <?php
  2. /**
  3.  * CategoriaSubcategoria Active Record
  4.  * @author  <Ricelli Carvalho>
  5.  */
  6. class CategoriaSubcategoria extends TRecord
  7. {
  8.     const TABLENAME 'estoque_categoria_subcategoria';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.        
  12.     public function __construct($id NULL)
  13.     {
  14.         parent::__construct($id);
  15.         parent::addAttribute('estoque_categoria_id');
  16.         parent::addAttribute('estoque_subcategoria_id');
  17.     }
  18. }
  19. ?>
</Ricelli></Ricelli>
RC

Já reescrevi tudo novamente, bati de todo lado e não encontrei o que está faltando para carregar os dados no multifield! Me ajudem ai pessoal, a solucionar este problema...
PD

Deve ser o nome dos atributos que não batem, veja esse exemplo:
www.adianti.com.br/framework_files/tutor/index.php?class=CustomerFor