Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Adianti Studio: datagrid falha adicionando items na renderização Criei um datagrid no Adianti Studio e ao tentar renderizá-lo, meu método onReload dá erro na hora que tenta adicionar um objeto ao datagrid... podem me ajudar a achar o problema? Erro: Fatal error: Cannot access empty property in D:DropboxEstudosAdianti TestelibadiantiwidgetwebdatagridTDataGrid.class.php on line 256 datagrid.form.xml ...
WG
Adianti Studio: datagrid falha adicionando items na renderização  
Fechado
Criei um datagrid no Adianti Studio e ao tentar renderizá-lo, meu método onReload dá erro na hora que tenta adicionar um objeto ao datagrid... podem me ajudar a achar o problema?

Erro: Fatal error: Cannot access empty property in D:DropboxEstudosAdianti TestelibadiantiwidgetwebdatagridTDataGrid.class.php on line 256


datagrid.form.xml
<?xml version="1.0" encoding="UTF-8"?>
<form>
<tdatagrid id="0">
<class>TDataGrid</class>
<name>datagrid</name>
<x>10</x>
<y>10</y>
<loader>onReload</loader>
<template></template>
<width>400</width>
<height>300</height>
<columns>
<tdatagridcolumn id="1">
<name>id</name>
<align>left</align>
<label>ID</label>
<width>40</width>
</tdatagridcolumn>
<tdatagridcolumn id="2">
<name>name</name>
<align>left</align>
<label>Nome</label>
<width>360</width>
</tdatagridcolumn>
</columns>
<actions>
<tdatagridaction id="1">
<method>onEdit</method>
<image>ico_edit.png</image>
<field></field>
<label>Editar</label>
<template></template>
</tdatagridaction>
</actions>
<pagenavigator>yes</pagenavigator>
</tdatagrid>
</form>


DesignDataGridView.class.php
  1. <?php
  2. class DesignDataGridView extends TPage
  3. {
  4.     private $form;
  5.     private $datagrid;
  6.     private $loaded;
  7.     
  8.     function __construct()
  9.     {
  10.         parent::__construct();
  11.         
  12.         // cria o formulário
  13.         $this->form = new TForm('form_Teste');
  14.         
  15.         try
  16.         {
  17.             // cria o painel TUIBuilder
  18.             $ui = new TUIBuilder(500400);
  19.             $ui->setController($this);
  20.             $ui->setForm($this->form);
  21.             
  22.             // interpreta o XML
  23.             $ui->parseFile('app/forms/datagrid.form.xml');
  24.             
  25.             // obtém o objeto datagrid
  26.             $this->datagrid $ui->getWidget('datagrid');
  27.             
  28.             $this->form->add($ui);
  29.             $this->form->setFields($ui->getFields());
  30.         }
  31.         catch(Exception $e)
  32.         {
  33.             new TMessage('error'$e->getMessage());
  34.         }
  35.         parent::add($this->form);
  36.     }
  37.     
  38.     function onEdit($param)
  39.     {
  40.         new TMessage('info'"Editing Record {$param['key']}");
  41.     }
  42.     
  43.     function onReload($param=NULL)
  44.     {
  45.         $this->datagrid->clear();
  46.         
  47.         $object = new StdClass;
  48.         $object->id 1;
  49.         $object->name 'Wemerson Guimarães';
  50.         $this->datagrid->addItem($object);
  51.         
  52.         $this->loaded true;
  53.     }
  54.     
  55.     function show()
  56.     {
  57.         if(!$this->loaded)
  58.         {
  59.             $this->onReload();
  60.         }
  61.         
  62.         parent::show();
  63.     }
  64. }
  65. ?>
php

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


WG

Esqueci de mencionar que o erro acontece na linha, 50 da classe, justamente ao tentar adicionar o item..
PD

Wemerson,

Na action da datagrid faltou preencher o "field", que trata-se da identificação do campo que será passado como parâmetro, normalmente o ID do registro.

Atenciosamente,
Pablo
WG

Bom dia Pablo...

Obrigado pela resposta... realmente bastou isso!

Foquei no código e como o formulário aparentemente estava desenhado, não me ocorreu que poderia ser algo do datagrid!


Valeu!!
WG

Pablo, estou com outra falha, mas agora é no código do capítulo 7 (páginas 30 a 335)... como ainda é relacionado a datagrid e ao livro, postei nessa mesma dúvida pra não ficar criando posts parecidos...

Ao "Salvar", recebo a mensagem "Records saved", indicando que os dados foram armazenados na seção através da chave persisted_objects, porém logo em seguida aparece a mensagem abaixo:

Fatal error: Call to undefined method stdClass::show() in D:DropboxEstudosAdianti TestelibadiantiwidgetwebgeneralTElement.class.php on line 188

Abaixo meu código:

formdatagrid.form.xml
<?xml version="1.0" encoding="UTF-8"?>
<form>
<tframe id="0">
<class>TFrame</class>
<name>frame2</name>
<title>Register:</title>
<x>35</x>
<y>25</y>
<width>375</width>
<height>129</height>
<child>
<tpanel>
<tlabel id="0">
<class>TLabel</class>
<name>label2</name>
<x>10</x>
<y>10</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Identification:</value>
</tlabel>
<tentry id="1">
<class>TEntry</class>
<name>id</name>
<x>95</x>
<y>10</y>
<value></value>
<mask></mask>
<width>97</width>
<maxlen>0</maxlen>
<editable>1</editable>
<tip></tip>
<required></required>
</tentry>
<tlabel id="2">
<class>TLabel</class>
<name>label3</name>
<x>10</x>
<y>40</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Name:</value>
</tlabel>
<tentry id="3">
<class>TEntry</class>
<name>name</name>
<x>95</x>
<y>40</y>
<value></value>
<mask></mask>
<width>252</width>
<maxlen>0</maxlen>
<editable>1</editable>
<tip></tip>
<required></required>
</tentry>
<tbutton id="4">
<class>TButton</class>
<name>Save</name>
<x>280</x>
<y>75</y>
<value>Salvar</value>
<icon>ico_save.png</icon>
<action>onSave</action>
<template></template>
</tbutton>
</tpanel>
</child>
</tframe>
<tframe id="1">
<class>TFrame</class>
<name>frame3</name>
<title>Listing:</title>
<x>35</x>
<y>170</y>
<width>375</width>
<height>245</height>
<child>
<tpanel>
<tdatagrid id="0">
<class>TDataGrid</class>
<name>datagrid1</name>
<x>10</x>
<y>10</y>
<loader>onReload</loader>
<template></template>
<width>345</width>
<height>200</height>
<columns>
<tdatagridcolumn id="1">
<name>id</name>
<align>left</align>
<label>Identification</label>
<width>85</width>
</tdatagridcolumn>
<tdatagridcolumn id="2">
<name>name</name>
<align>left</align>
<label>Name</label>
<width>250</width>
</tdatagridcolumn>
</columns>
<actions>
<tdatagridaction id="1">
<method>onEdit</method>
<image>ico_edit.png</image>
<field>id</field>
<label>Edit</label>
<template></template>
</tdatagridaction>
<tdatagridaction id="2">
<method>onDelete</method>
<image>ico_delete.png</image>
<field>id</field>
<label>Delete</label>
<template></template>
</tdatagridaction>
</actions>
<pagenavigator>no</pagenavigator>
</tdatagrid>
</tpanel>
</child>
</tframe>
</form>


DesignFormDataGridView
  1. <?php
  2. class DesignFormDataGridView extends TPage
  3. {
  4.     private $form;
  5.     private $datagrid;
  6.     private $loaded;
  7.     
  8.     function __construct()
  9.     {
  10.         parent::__construct();
  11.         new TSession;
  12.         $this->form = new TForm('form_Teste');
  13.         
  14.         try
  15.         {
  16.             // crua um painel TUIBuilder
  17.             $ui = new TUIBuilder(500400);
  18.             $ui->setController($this);
  19.             $ui->setForm($this->form);
  20.             
  21.             // interpreta interface XML
  22.             $ui->parseFile('app/forms/formdatagrid.form.xml');
  23.             
  24.             // obtém o objeto datagrid
  25.             $this->datagrid $ui->getWidget('datagrid1');
  26.             
  27.             // adiciona o painel TUIBuilder ao TForm
  28.             $this->form->add($ui);
  29.             
  30.             // define quais são os campos do formulário
  31.             $this->form->setFields($ui->getFields());
  32.         }
  33.         catch(Exception $e)
  34.         {
  35.             new TMessage('error'$e->getMessage());
  36.         }
  37.         
  38.         parent::add($this->form);
  39.     }
  40.     
  41.     function onSave()
  42.     {
  43.         $object $this->form->getData();
  44.         
  45.         $persisted_objects TSession::getValue('persisted_objects');
  46.         
  47.         $persisted_objects[$object->id] = $object;
  48.         
  49.         TSession::setValue('persisted_objects'$persisted_objects);
  50.         
  51.         new TMessage('info''Recors saved');
  52.         
  53.         $this->onReload();
  54.     }
  55.     
  56.     function onEdit($param)
  57.     {
  58.         $key $param['key'];
  59.         
  60.         // carrega a lista de objetos da seção
  61.         $persisted_objects TSession::getValue('persisted_objects');
  62.         
  63.         $object $persisted_objects[$key];
  64.         
  65.         $this->form->setData($object);
  66.     }
  67.     
  68.     function onDelete($param)
  69.     {
  70.         $key $param['key'];
  71.         
  72.         // cria a ação de exclusão
  73.         $action1 = new TAction(array($this'Delete'));
  74.         $action1->setParameter('key'$key);
  75.         
  76.         new TQuestion('DO you relly want to delete?'$action1);
  77.     }
  78.     
  79.     function Delete($param)
  80.     {
  81.         $key $param['key'];
  82.         
  83.         // obtém a lista de objetos da seção
  84.         $persisted_objects TSession::getValue('persisted_objects');
  85.         
  86.         // Remove o objeto selecionado
  87.         unset($persisted_objects[$key]);
  88.         
  89.         // Grava novamente a lista de objetos na memória, sem o registro excluído
  90.         TSession::setValue('persisted_objects'$persisted_objects);
  91.         
  92.         $this->onReload();
  93.         
  94.         new TMessage('info''Record Deleted');
  95.     }
  96.     
  97.     function onReload($param NULL)
  98.     {
  99.         $this->datagrid->clear();
  100.                         
  101.         $persisted_objects TSession::getValue('persisted_objects');
  102.         
  103.         if($persisted_objects)
  104.         {
  105.             foreach($persisted_objects as $object)
  106.             {
  107.                 $this->datagrid->add($object);
  108.             }
  109.         }    
  110.         
  111.         $this->loaded true;
  112.         
  113.     }
  114.     
  115.     function show()
  116.     {
  117.         if(!$this->loaded)
  118.         {
  119.             $this->onReload();
  120.         }
  121.         
  122.         parent::show();
  123.     }
  124. }
  125. ?>
PD

Só um erro de digitação. É addItem():
  1. <?php
  2. $this->datagrid->addItem($object);
  3. ?>


Att,
Pablo
WG

Fala sério!

Não entendo como é que a gente lê e confere várias vezes e não acha o erro... ainda mais sendo um erro tão besta!
RF

boa noite, eu ainda não comprei o livro, comecei a desenvolver esta semana e tive o mesmo erro do colega acima, porém eu não digitei linha alguma eu fiz a classe e a pagina usando o studio pro e uma tabela no banco de dados
e este tal de addItem veio sozinho, mas ainda estou testando, e eu estava com outro erro, a minha coluna no banco id estava maiúscula e estava dando erro de key contornei no código para minúscula e ficou sem novidades.
a questão agora é como traduzir a mensagens tais como (Do you really want to delete)
PD

Rodrigo,

www.adianti.com.br/forum/pt/view_441?erro-message-not-found