Edição inline não edita e cria outro registro com a alteração Preciso de ajuda para entender o que está acontecendo: Com base no código disponibilizado no tutor ajustei o código conforme abaixo para realizar edição inline. É inserido a alteração na linha da datagrid, e após alterar o campo nome aparece a msg "Record Update", porém ao invés de salvar o que foi alterado, simplesmente após editar o nome do cliente é criado um novo registro (valo...
ML
Edição inline não edita e cria outro registro com a alteração  
Fechado
Preciso de ajuda para entender o que está acontecendo:

Com base no código disponibilizado no tutor ajustei o código conforme abaixo para realizar edição inline. É inserido a alteração na linha da datagrid, e após alterar o campo nome aparece a msg "Record Update", porém ao invés de salvar o que foi alterado, simplesmente após editar o nome do cliente é criado um novo registro (valor do campo alterado + alteração inserida).

 
  1. <?php
  2. class ListaClienteForm extends TStandardList
  3. {
  4. protected $form;
  5. protected $datagrid;
  6. protected $pageNavigation;
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. parent::setDatabase('conectabd');
  11. parent::setActiveRecord('Cliente');
  12. parent::setFilterField('nome_cliente');
  13. parent::setDefaultOrder('id_cliente', 'asc');
  14. $this->form = new TQuickForm('form_busca_cliente');
  15. $this->form->setFormTitle('Buscar Cliente');
  16. $this->form->class = 'tform';
  17. $this->form->style = 'width: 500px';
  18. $nome_cliente = new TEntry('nome_cliente');
  19. $this->form->addQuickField( 'Nome:', $nome_cliente, 200 );
  20. $this->form->addQuickAction('Buscar', new TAction(array($this, 'onSearch')), 'ico_find.png');
  21. $this->form->addQuickAction('Novo', new TAction(array('ClienteForm', 'onEdit')), 'ico_new.png');
  22. $this->form->setData( TSession::getValue('Nome_filter_data') );
  23. $this->datagrid = new TQuickGrid;
  24. $this->datagrid->setHeight(230);
  25. $this->datagrid->addQuickColumn('ID', 'id_cliente', 'right', 40, new TAction(array($this, 'onReload')), array('order', 'id_cliente'));
  26. $nome_cliente = $this->datagrid->addQuickColumn('Nome', 'nome_cliente', 'left', 400, new TAction(array($this, 'onReload')), array('order', 'nome_cliente'));
  27. $this->datagrid->addQuickAction('Edit', new TDataGridAction(array('ClienteForm', 'onEdit')), 'id_cliente', 'ico_edit.png');
  28. $this->datagrid->addQuickAction('Delete', new TDataGridAction(array($this, 'onDelete')), 'id_cliente', 'ico_delete.png');
  29. $editaction = new TDataGridAction(array($this, 'onInlineEdit'));
  30. $editaction->setField('nome_cliente');
  31. $nome_cliente->setEditAction($editaction);
  32. $this->datagrid->createModel();
  33. $this->pageNavigation = new TPageNavigation;
  34. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  35. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  36. $table = new TTable;
  37. $table->addRow()->addCell($this->form);
  38. $table->addRow()->addCell($this->datagrid);
  39. $table->addRow()->addCell($this->pageNavigation);
  40. parent::add($table);
  41. }
  42. }
  43. ?>


E quando clico em qualquer linha da datagrid ou no botão editar para ser redirecionado para o formulário de cadastro de cliente não vem carregado com as informações que desejo editar. Ao tentar excluir, mesmo exibindo a msg de exclusão com sucesso o registro não é excluído.

Desde já agradeço muito se alguém puder me ajudar.

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


FC

Corrija essa linha, é preciso passar o id para fazer o edit VC está passando o nome_cliente

$editaction->setField('id_cliente');

ML

Felipe,

Fiz a correção da linha, mas nada mudou.

Atc,

Marcelo.
ML

O problema em questão foi resolvido com ajuda do Felipe.

Model antigo com erro:
 
  1. <?php
  2. class Cliente extends TRecord
  3. {
  4. const TABLENAME = 'tbclientes';
  5. const PRIMARYKEY = 'id_cliente';
  6. const IDPOLICY = 'max';
  7. public function __construct($id = NULL)
  8. {
  9. parent::addAttribute('nome_cliente');
  10. parent::addAttribute('tel_cliente');
  11. parent::addAttribute('endereco_cliente');
  12. parent::addAttribute('ponto_ref');
  13. parent::addAttribute('data_nasc_cliente');
  14. }
  15. }
  16. ?>


Model atual corrigido pelo Felipe

 
  1. <?php
  2. class Cliente extends TRecord
  3. {
  4. const TABLENAME = 'tbclientes';
  5. const PRIMARYKEY = 'id_cliente';
  6. const IDPOLICY = 'max';
  7. public function __construct($id = NULL, $callObjectLoad = TRUE) // erro nessa linha
  8. {
  9. parent::__construct($id, $callObjectLoad); // falta essa linha
  10. parent::addAttribute('nome_cliente');
  11. parent::addAttribute('tel_cliente');
  12. parent::addAttribute('endereco_cliente');
  13. parent::addAttribute('ponto_ref');
  14. parent::addAttribute('data_nasc_cliente');
  15. }
  16. }
  17. ?>