menu
Fórum Adianti
menu Menu
Problema ao adicionar mais de 1 item na TDataGrid Olá, estou desenvolvendo um sistema utilizando o framework do adianti, e estou com dificuldade em adicionar ao meu TDataGrid mais de uma linha, a primeira linha que adiciono esta adicionando corretamente, porem quando limpo os campos do formulario para adicionar uma nova linha, a linha que adicionei anteriormente esta sendo substituida, por uma nova, sendo que esta passando uma nova uniqid para a...
A
Problema ao adicionar mais de 1 item na TDataGrid  
Olá, estou desenvolvendo um sistema utilizando o framework do adianti, e estou com dificuldade em adicionar ao meu TDataGrid mais de uma linha, a primeira linha que adiciono esta adicionando corretamente, porem quando limpo os campos do formulario para adicionar uma nova linha, a linha que adicionei anteriormente esta sendo substituida, por uma nova, sendo que esta passando uma nova uniqid para adicionar um novo registro.

public function onAddAddress(){ $this->subForm->setCurrentPage(1); $data = $this->subForm->getData(); var_dump($data); //VERIFICAR OS CAMPOS NECESSARIOS //CARREGAR UNIQID $uniqid = !empty($data->endereco_uniqid) ? $data->endereco_uniqid : uniqid(); $gridEndereco = [ 'uniqid' => $uniqid, 'endereco_id' => $data->endereco_id, 'logradouro' => $data->logradouro, 'bairro' => $data->bairro, 'cidade' => $data->cidade, 'cep' => $data->cep, 'tipo' => $data->tipo ]; $row = $this->listEndereco->addItem((object) $gridEndereco); $row->id = $uniqid; TDataGrid::replaceRowById('listEndereco', $uniqid, $row); $data->endereco_uniqid = ''; $data->endereco_id = ''; $data->logradouro = ''; $data->numero = ''; $data->complemento = ''; $data->bairro = ''; $data->estado_id = ''; $data->cidade = ''; $data->cep = ''; $data->tipo = ''; TForm::sendData('formCliente', $data, false, false); }

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


NR

Poste todo o código da classe
A

  1. <?php
  2. class FormClientes extends TPage{
  3.     private $formCliente;
  4.     private $subForm;
  5.     
  6.     private $listEndereco;
  7.     
  8.     
  9.     
  10.     public function __construct($param){
  11.         parent::__construct();
  12.         //INICIANDO FORMULARIO
  13.         $this->formCliente = new BootstrapFormBuilder('formCliente');
  14.         $this->formCliente->setFormTitle('Cadastro de Cliente');
  15.         //ABA DADOS PESSOAIS
  16.         $this->formCliente->appendPage('Dados Pessoais');
  17.         //TAMANHO DOS CAMPOS 100%
  18.         $this->formCliente->setFieldSizes('100%');
  19.         
  20.         //DADOS PESSOAIS
  21.         $nome            = new TEntry('nome');
  22.         $sobrenome       = new TEntry('sobrenome');
  23.         $data_nasc       = new TDate('data_nasc');
  24.         $estado_civil    = new TEntry('estado_civil');
  25.         $cpf             = new TEntry('cpf');
  26.         $rg              = new TEntry('rg');
  27.         $expeditor       = new TEntry('expeditor');
  28.         $nacionalidade   = new TEntry('nacionalidade');
  29.         $doc_estrangeiro = new TEntry('doc_estrangeiro');
  30.         $profissao       = new TEntry('profissao');
  31.         $foto            = new TEntry('foto');
  32.         $observacao      = new TEntry('observacao');
  33.         
  34.         $pf_pj   = new TRadioGroup('pf_pj');
  35.         $pf_pj->setLayout('horizontal');
  36.         $pf_pj->setUseButton();
  37.         
  38.         $itemsPfPj = ['PF'=>'Pessoa Fisica''PJ'=>'Pessoa Juridica'];
  39.         
  40.         $pf_pj->addItems($itemsPfPj);
  41.         $pf_pj->setValue('PF');
  42.         $pf_pj->setChangeAction(new TAction([$this'onChangePfPj']));
  43.         
  44.         //LINHA 1 
  45.         $row $this->formCliente->addFields( [ new TLabel('Nome'),$nome ],
  46.                                        [ new TLabel('Sobrenome'),$sobrenome ],
  47.                                        [ new TLabel('Nascimento'),$data_nasc ] );
  48.         $row->layout = ['col-sm-3''col-sm-6''col-sm-3'];
  49.         //LINHA 2
  50.         $row $this->formCliente->addFields( [ new TLabel('Estado Civil'),$estado_civil ],
  51.                                        [ new TLabel('CPF'),$cpf ],
  52.                                        [ new TLabel('RG'),$rg ],
  53.                                        [ new TLabel('Orgão Expeditor'),$expeditor ] );
  54.         $row->layout = ['col-sm-3''col-sm-3''col-sm-3''col-sm-3'];
  55.         //LINHA 3
  56.         $row $this->formCliente->addFields( [ new TLabel('Nacionalidade'),$nacionalidade ],
  57.                                        [ new TLabel('Doc. Estrangeiro'),$doc_estrangeiro ],
  58.                                        [ new TLabel('Profissão'),$profissao ] );
  59.         $row->layout = ['col-sm-3''col-sm-3''col-sm-3'];
  60.         
  61.         $row $this->formCliente->addFields(  [$pf_pj] );
  62.         $row->layout = ['col-sm-12'];
  63.         
  64.         //SUBFORMULARIOS
  65.         $this->subForm = new BootstrapFormBuilder;
  66.         
  67.         //FORMULARIO DE PESSOA JURIDICA
  68.         $this->subForm->appendPage('Pessoa Jurídica');
  69.         $this->subForm->setFieldSizes('100%');
  70.         //PESSOA JURIDICA
  71.         $razao_social        = new TEntry('razao_social');
  72.         $data_abertura       = new TDate('data_abertura');
  73.         $nome_fantasia       = new TEntry('nome_fantasia');
  74. //      $limite_credito      = new TEntry('limite_credito');
  75. //      $credito_disponivel  = new TEntry('credito_disponivel');
  76.         $cnpj                = new TEntry('cnpj');
  77.         $insc_estadual       = new TEntry('insc_estadual');
  78.         $ramo_atividade      = new TEntry('ramo_atividade');
  79.         //LINHA 1 
  80.         $row $this->subForm->addFields( [ new TLabel('Razão Social'),$razao_social ],
  81.                                        [ new TLabel('Data Abertura'),$data_abertura ],
  82.                                        [ new TLabel('Nome Fantasia'),$nome_fantasia ] );
  83.         $row->layout = ['col-sm-6''col-sm-2''col-sm-4'];
  84.         //LINHA 2 
  85.         $row $this->subForm->addFields( [ new TLabel('CNPJ'),$cnpj ],
  86.                                        [ new TLabel('Inscrição Estadual'),$insc_estadual ],
  87.                                        [ new TLabel('Ramo Atividade'),$ramo_atividade ] );
  88.         $row->layout = ['col-sm-3''col-sm-2''col-sm-4'];
  89.         
  90.         
  91.         $razao_social->setEditable(FALSE);
  92.         $data_abertura->disableField('formCliente''data_abertura');
  93.         $nome_fantasia->setEditable(FALSE);
  94.         $cnpj->setEditable(FALSE);
  95.         $insc_estadual->setEditable(FALSE);
  96.         $ramo_atividade->setEditable(FALSE);
  97.         
  98.         //FORMULARIO DE ENDEREÇOS
  99.         $this->subForm->appendPage('Endereços');
  100.         
  101.         $this->subForm->setFieldSizes('100%');
  102.         //ENDEREÇOS
  103.         
  104.         $endereco_uniqid = new THidden('endereco_uniqid');
  105.         $endereco_id     = new THidden('endereco_id');
  106.         $logradouro      = new TEntry('logradouro');
  107.         $numero          = new TEntry('numero');
  108.         $complemento     = new TEntry('complemento');
  109.         $bairro          = new TEntry('bairro');
  110.         $estado          = new TDBCombo('estado_id''gestao''Estado''id''uf');
  111.         $cidade          = new TCombo('cidade');
  112.         $cep             = new TEntry('cep');
  113.         $tipo_endereco   = new TCombo('tipo_endereco');
  114.         $cidade->setEditable(FALSE);
  115.         $estado->setChangeAction(new TAction([$this'onEstadoChange']));
  116.         
  117.         //TIPOS DE ENDEREÇO
  118.         $comboTipoEndereco['Residencial']    = 'Residencial';
  119.         $comboTipoEndereco['Comercial']      = 'Comercial';
  120.         $comboTipoEndereco['Local Trabalho'] = 'Local Trabalho';
  121.         $comboTipoEndereco['Faturamento']    = 'Faturamento';
  122.         $comboTipoEndereco['Cobrança']       = 'Cobrança';
  123.         
  124.         TCombo::reload('formCliente''tipo_endereco'$comboTipoEndereco);
  125.         
  126.         
  127.         //LINHA INVISIVEL 
  128.         
  129.         $row $this->subForm->addFields( [ $endereco_uniqid ],
  130.                                           [ $endereco_id ]);
  131.         $row->layout = ['col-sm-6''col-sm-6'];
  132.         //LINHA 1 
  133.         $row $this->subForm->addFields( [ new TLabel('Logradouro'),$logradouro ],
  134.                                           [ new TLabel('Nº'),$numero ],
  135.                                           [ new TLabel('Complemento'),$complemento ] );
  136.         $row->layout = ['col-sm-6''col-sm-2''col-sm-4'];
  137.         //BOTÃO ADD ENDEREÇO
  138.         $addEndereco TButton::create('addEndereco', [$this'onAddAddress'], '''fa:plus-circle green');
  139.         //LINHA 2
  140.         $row $this->subForm->addFields( [ new TLabel('Bairro'),$bairro ],
  141.                                           [ new TLabel('Estado'),$estado ],
  142.                                           [ new TLabel('Cidade'),$cidade ],
  143.                                           [ new TLabel('CEP'),$cep ],
  144.                                           [ new TLabel('Endereço'),$tipo_endereco ],
  145.                                           [ new TLabel('&nbsp'), $addEndereco] );
  146.         $row->layout = ['col-sm-3''col-sm-2''col-sm-2''col-sm-2''col-sm-2''col-sm-1'];
  147.         
  148.         //DATAGRID ENDEREÇO
  149.         $this->listEndereco = new BootstrapDatagridWrapper(new TDataGrid);
  150.         
  151.         $this->listEndereco->setHeight(150);
  152.         $this->listEndereco->makeScrollable;
  153.         $this->listEndereco->setId('listEndereco');
  154.         $this->listEndereco->generateHiddenFields();
  155.         $this->listEndereco->style "min-width: 700px; width:100%; margin-bottom: 10px"
  156.         
  157.         $endereco_col_uniqid     = new TDataGridColumn('uniqid''Uniqid''center''10%');
  158.         $endereco_col_id         = new TDataGridColumn('endereco_id''ID''center''10%');
  159.         $endereco_col_logradouro = new TDataGridColumn('logradouro''Logradouro''center''30%');
  160.         $endereco_col_bairro     = new TDataGridColumn('bairro''Bairro''center''20%');
  161.         $endereco_col_cidade     = new TDataGridColumn('cidade''Cidade''center''10%');
  162.         $endereco_col_cep        = new TDataGridColumn('cep''CEP''center''10%');
  163.         $endereco_col_tipo       = new TDataGridColumn('tipo''Tipo''center''10%');
  164.         
  165.         $this->listEndereco->addColumn($endereco_col_uniqid);
  166.         $this->listEndereco->addColumn($endereco_col_id);
  167.         $this->listEndereco->addColumn($endereco_col_logradouro);
  168.         $this->listEndereco->addColumn($endereco_col_bairro);
  169.         $this->listEndereco->addColumn($endereco_col_cidade);
  170.         $this->listEndereco->addColumn($endereco_col_cep);
  171.         $this->listEndereco->addColumn($endereco_col_tipo);
  172.         
  173.         $endereco_col_tipo ->setTransformer(function($val){
  174.             return utf8_decode($val);
  175.         });
  176.         
  177.         $endereco_col_uniqid->setVisibility(FALSE);
  178.         $endereco_col_id->setVisibility(FALSE);
  179.         
  180.         $this->listEndereco->createModel();
  181.         
  182.         $panelEndereco = new TPanelGroup;
  183.         $panelEndereco->add($this->listEndereco);
  184.         $panelEndereco->getBody()->style 'overflow-x: auto';
  185.         
  186.         $this->subForm->addContent([$panelEndereco]);
  187.         
  188.                   
  189.         //FORMULARIO DE TELEFONES
  190.         $this->subForm->appendPage('Telefones');
  191.         $this->subForm->setFieldSizes('100%');
  192.         //TELEFONES
  193.         $telefone   = new TEntry('telefone');
  194.         $descricao  = new TEntry('descricao');
  195.         $tipo_telefone       = new TCombo('tipo_telefone');
  196.         
  197.         //TIPOS DE TELEFONES
  198.         $comboTipoTelefone['Celular']              = 'Celular';     
  199.         $comboTipoTelefone['Residencial']          = 'Residencial';   
  200.         $comboTipoTelefone['Comercial']            = 'Comercial';
  201.         $comboTipoTelefone['Contato']              = 'Contato';
  202.         $comboTipoTelefone['Referência Comercial'] = 'Referência Comercial';
  203.         $comboTipoTelefone['Referência Pessoal']   = 'Referência Pessoal';
  204.         
  205.         
  206.         TCombo::reload('formCliente''tipo_telefone'$comboTipoTelefone);
  207.         //LINHA 1 
  208.         $row $this->subForm->addFields( [ new TLabel('Telefone'),$telefone ],
  209.                                        [ new TLabel('Descrição'),$descricao ],
  210.                                        [ new TLabel('Tipo'),$tipo_telefone ] );
  211.         $row->layout = ['col-sm-3''col-sm-6''col-sm-3'];
  212.   
  213.         
  214.         $this->formCliente->addContent( [$this->subForm] );
  215.         $this->formCliente->addAction('Salvar', new TAction(array($this'onSave')), 'far:check-circle green');
  216.         parent::add($this->formCliente);
  217.         
  218.         
  219.     }
  220.     
  221.     public static function onEstadoChange($param){
  222.         //CARREGAR CIDADES REFERENTE AO ESTADO SELECIONADO
  223.         if($param['estado_id'] != null && $param['estado_id'] != ''){
  224.             $key $param['estado_id'];
  225.             try{
  226.                 TTransaction::open('gestao');
  227.                     $conn TTransaction::get();
  228.                     $result $conn->query('SELECT id, descricao from cidade WHERE estado_id = '.$key.' order by descricao');
  229.                     $data = array();
  230.                     foreach ($result as $row)
  231.                     {
  232.                         $data[$row['id']] = $row['descricao'];
  233.                     }
  234.                     TCombo::reload('formCliente''cidade'$data);
  235.                     TCombo::enableField('formCliente''cidade');
  236.                 TTransaction::close();
  237.             }catch(Exception $e){
  238.                 new TMessage('error'$e->getMessage());
  239.             }
  240.         }else{
  241.             TCombo::reload('formCliente''cidade''');
  242.             TCombo::disableField('formCliente''cidade');
  243.         }
  244.     }
  245.     
  246.     public static function onChangePfPj($param){
  247.         if($param['pf_pj'] == 'PF'){
  248.             TEntry::disableField('formCliente''razao_social');
  249.             TDate::disableField('formCliente''data_abertura');
  250.             TEntry::disableField('formCliente''nome_fantasia');
  251.             TEntry::disableField('formCliente''cnpj');
  252.             TEntry::disableField('formCliente''insc_estadual');
  253.             TEntry::disableField('formCliente''ramo_atividade');
  254.             //LIMPAR CAMPOS PESSOA JURIDICA
  255.             TEntry::clearField('formCliente''razao_social');
  256.             TEntry::clearField('formCliente''data_abertura');
  257.             TEntry::clearField('formCliente''nome_fantasia');
  258.             TEntry::clearField('formCliente''cnpj');
  259.             TEntry::clearField('formCliente''insc_estadual');
  260.             TEntry::clearField('formCliente''ramo_atividade');
  261.         }else{
  262.             TEntry::enableField('formCliente''razao_social');
  263.             TDate::enableField('formCliente''data_abertura');
  264.             TEntry::enableField('formCliente''nome_fantasia');
  265.             TEntry::enableField('formCliente''cnpj');
  266.             TEntry::enableField('formCliente''insc_estadual');
  267.             TEntry::enableField('formCliente''ramo_atividade');
  268.         }
  269.     }
  270.     
  271.     public function onSave($param){
  272.         try{
  273.             TTransaction::open('gestao');
  274.             //CADASTRO DOS DADOS PESSOAIS
  275.             $pessoa = new Pessoa;
  276.             $pessoa->nome            $param['nome'];
  277.             $pessoa->sobrenome       $param['sobrenome'];
  278.             $pessoa->data_nasc       $param['data_nasc'];
  279.             $pessoa->estado_civil    $param['estado_civil'];
  280.             $pessoa->cpf             $param['cpf'];
  281.             $pessoa->rg              $param['rg'];
  282.             $pessoa->expeditor       $param['expeditor'];
  283.             $pessoa->doc_estrangeiro $param['nacionalidade'];
  284.             $pessoa->nascionalidade  $param['doc_estrangeiro'];
  285.             $pessoa->profissao       $param['profissao'];
  286.             $pessoa->foto            '';
  287.             $pessoa->observacoes     '';
  288.             $pessoa->store();
  289.             
  290.             //ID DA PESSOA CADASTRADA
  291.             $idPessoa $pessoa->id;
  292.             
  293.             //CADASTRO PESSOA JURIDICA
  294.             $pessoa_juridica = new PessoaJuridica;
  295.             $pessoa_juridica->pessoa_id      $idPessoa;
  296.             $pessoa_juridica->razao_social   $param['razao_social'];
  297.             $pessoa_juridica->data_abertura  $param['data_abertura'];
  298.             $pessoa_juridica->nome_fantasia  $param['nome_fantasia'];
  299.             $pessoa_juridica->cnpj           $param['cnpj'];
  300.             $pessoa_juridica->insc_estadual  $param['insc_estadual'];
  301.             $pessoa_juridica->ramo_atividade $param['ramo_atividade'];
  302.             $pessoa_juridica->store();
  303.             
  304.             //CADASTRO ENDEREÇO
  305.             $endereco = new Endereco;
  306.             $endereco->pessoa_id   $idPessoa;
  307.             $endereco->logradouro  $param['logradouro'];
  308.             $endereco->numero      $param['numero'];
  309.             $endereco->complemento $param['complemento'];
  310.             $endereco->bairro      $param['bairro'];
  311.             $endereco->cidade_id   $param['cidade'];
  312.             $endereco->cep         $param['cep'];
  313.             $endereco->tipo        '';
  314.             $endereco->store();
  315.             
  316.             //CADASTRO TELEFONE
  317.             
  318.             //CADASTRO CLIENTE
  319.             
  320.             new TMessage('info''Cliente cadastrado com sucesso.');
  321.             
  322.             TTransaction::close();
  323.         }catch(Exception $e){
  324.             new TMessage('error'$e->getMessage());
  325.         }
  326.     }
  327.     
  328.     public function onAddAddress($param){
  329.     
  330.         $this->subForm->setCurrentPage(1);
  331.         
  332.         $data $this->subForm->getData();
  333.         //VERIFICAR OS CAMPOS NECESSARIOS
  334.         
  335.         //CARREGAR UNIQID
  336.         $uniqid = !empty($data->endereco_uniqid) ? $data->endereco_uniqid uniqid();
  337.         
  338.         $gridEndereco = [
  339.             'uniqid' => $uniqid,
  340.             'endereco_id'     => $data->endereco_id,    
  341.             'logradouro'      => $data->logradouro,
  342.             'bairro'          => $data->bairro,
  343.             'cidade'          => $data->cidade,
  344.             'cep'             => $data->cep,
  345.             'tipo'            => $data->tipo_endereco
  346.         ];
  347.         
  348.         
  349.         $row $this->listEndereco->addItem((object) $gridEndereco);
  350.         $row->id $uniqid;
  351.         
  352.         TDataGrid::replaceRowById('listEndereco'$uniqid$row);
  353.         
  354.         $data->endereco_uniqid '';
  355.         $data->endereco_id     '';
  356.         $data->logradouro      '';
  357.         $data->numero          '';
  358.         $data->complemento     '';
  359.         $data->bairro          '';
  360.         $data->estado_id       '';
  361.         $data->cidade          '';
  362.         $data->cep             '';
  363.         $data->tipo            '';
  364.         
  365.         TForm::sendData('formCliente'$datafalsefalse);
  366.     }
  367.     
  368.     public function onEdit($param){
  369.         
  370.     }
  371.     
  372.     public function onDelete($param){
  373.         
  374.     }
  375.     
  376.     public function onShow($param null){
  377.         
  378.     }
  379. }
  380. ?>
NR

Você deve passar o atributo "static" para a ação onAddAddress, senão a cada endereço adicionado haverá a recarga da tela, e com isso, os dados anteriores da grid serão perdidos:
  1. <?php
  2. $addEndereco TButton::create('addEndereco', [$this'onAddAddress'], '''fa:plus-circle green');
  3. $addEndereco->getAction()->setParameter('static','1');
  4. ?>
A

Muito obrigado, resolveu meu problema!!