menu
Fórum Adianti
menu Menu
Compartilhamento de Ideias - DataGrid com Vários Componentes Olá pessoal! Há muito tempo queria fazer um teste de uma DataGrid Massive Update contendo vários componentes, tais como: TEntry(exemplo do Tutor), TCombo, TDate, etc. Finalmente consegui terminar o meu teste e fiquei tão feliz com o resultado que resolvi compartilhar para que, aqueles que desejam algo desse tipo, saibam que é possível e aqueles que já fizeram algo assim também c...
ES
Compartilhamento de Ideias - DataGrid com Vários Componentes  
Fechado
Olá pessoal!
Há muito tempo queria fazer um teste de uma DataGrid Massive Update contendo vários componentes, tais como: TEntry(exemplo do Tutor), TCombo, TDate, etc.

Finalmente consegui terminar o meu teste e fiquei tão feliz com o resultado que resolvi compartilhar para que, aqueles que desejam algo desse tipo, saibam que é possível e aqueles que já fizeram algo assim também compartilhe sua ideia.

Estou colocando a imagem da tela abaixo e o código que realiza a proeza. Usei uma variável de sessão para guardar os dados.

Abs a todos!

Código:
  1. <?php function onReload($param NULL)
  2.     {
  3.         try
  4.         {            
  5.             $this->datagrid->clear();
  6.             $sel_objects TSession::getValue('sel_objects');
  7.             
  8.             if ($sel_objects)
  9.             {
  10.                 $tArray = array();
  11.                 foreach ($sel_objects as $object)
  12.                 {
  13.                     //Verifica se é um objeto
  14.                     if (!isset($object->ALL_FILIAIS->name)) {
  15.                         $vlr_temp $object->ALL_F;
  16.                         $object->ALL_FILIAIS = new TCombo('ALL_FILIAIS_'.$object->LANCAMENTO);
  17.                         $object->ALL_FILIAIS->setSize(60);
  18.                         $object->ALL_FILIAIS->addItems(array('S'=>'Sim''N'=>'Não'));
  19.                         $object->ALL_FILIAIS->setProperty('align''center');
  20.                         $object->ALL_FILIAIS->setValue($vlr_temp);
  21.                         
  22.                     }
  23.                     
  24.                     if (!isset($object->VENCIMENTO_INI->name)) {
  25.                         $vlr_temp $object->VENC_INI;
  26.                         $object->VENCIMENTO_INI = new TDate('VENCIMENTO_INI_'.$object->LANCAMENTO);
  27.                         $object->VENCIMENTO_INI->setSize(60);
  28.                         $object->VENCIMENTO_INI->setMask('dd/mm/yyyy');
  29.                         $object->VENCIMENTO_INI->setProperty('align''center');
  30.                         $object->VENCIMENTO_INI->setValue($vlr_temp);
  31.                         
  32.                     }
  33.                     
  34.                     if (!isset($object->NUMERO_PARCELAS->name)) {
  35.                         $vlr_temp $object->NUM_PARCELAS;
  36.                         $object->NUMERO_PARCELAS = new TEntry('NUMERO_PARCELAS_'.$object->LANCAMENTO);
  37.                         $object->NUMERO_PARCELAS->setSize(40);
  38.                         $object->NUMERO_PARCELAS->setProperty('align''center');
  39.                         $object->NUMERO_PARCELAS->setValue($vlr_temp);
  40.                         
  41.                     }
  42.                     
  43.                     if (!isset($object->OCORRENCIA->name)) {
  44.                         $vlr_temp $object->OCOR;
  45.                         $object->OCORRENCIA = new TCombo('OCORRENCIA_'.$object->LANCAMENTO);
  46.                         $object->OCORRENCIA->setSize(90);
  47.                         $object->OCORRENCIA->addItems(array('S'=>'Semanal''Q'=>'Quinzenal''M'=>'Mensal''A'=>'Anual'));
  48.                         $object->OCORRENCIA->setProperty('align''center');
  49.                         $object->OCORRENCIA->setValue($vlr_temp);
  50.                         
  51.                     }
  52.                     
  53.                     $tArray[] = $object->ALL_FILIAIS;
  54.                     $tArray[] = $object->VENCIMENTO_INI;
  55.                     $tArray[] = $object->NUMERO_PARCELAS;
  56.                     $tArray[] = $object->OCORRENCIA;
  57.                     //$this->formSel->addField($object->ALL_FILIAIS);
  58.                         
  59.                     
  60.                     $this->datagrid->addItem($object);
  61.                 }
  62.             }
  63.     
  64.             $this->formSel->setFields($tArray);
  65.             //$this->formSel->addField($object->ALL_FILIAIS);
  66.             $this->loaded true;
  67.             
  68.         }
  69.         catch (Exception $e// in case of exception
  70.         {
  71.             // shows the exception error message
  72.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  73.             // undo all pending operations
  74.             TTransaction::rollback();
  75.         }
  76.     } ?>

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


ES

Código para salvar os dados:
  1. <?php public function onSave()
  2.     {
  3.         $data $this->formSel->getData();
  4.         $this->formSel->setData($data); // keep the form filled
  5.     
  6.         try
  7.         {
  8.             $list_objects TSession::getValue('sel_objects');//Pega os dados gravados
  9.             TSession::setValue('sel_objects''');
  10.             $new_list = array();
  11.             
  12.             TTransaction::open('changeman');
  13.             
  14.             foreach ($this->formSel->getFields() as $name => $field)
  15.             {
  16.                 if ($field instanceof TEntry || $field instanceof TCombo || $field instanceof TDate)
  17.                 {
  18.                     $parts explode('_'$name);
  19.                     
  20.                     //Pega a parte referente ao id
  21.                     if ($parts[2]) {
  22.                         $id $parts[2];
  23.                     } else {
  24.                         $id $parts[1];
  25.                     }
  26.                     
  27.                     
  28.                     $objTmp $list_objects[$id];
  29.                     //unset($list_objects[$id]); // remove the product from the array
  30.                     
  31.                     if ($parts[0].'_'.$parts[1] == 'ALL_FILIAIS') {
  32.                         $objTmp->ALL_FILIAIS->setValue($field->getValue());
  33.                     }
  34.                     
  35.                     if ($parts[0].'_'.$parts[1] == 'VENCIMENTO_INI') {
  36.                         $objTmp->VENCIMENTO_INI->setValue($field->getValue());
  37.                     }
  38.                     
  39.                     if ($parts[0].'_'.$parts[1] == 'NUMERO_PARCELAS') {
  40.                         $objTmp->NUMERO_PARCELAS->setValue($field->getValue());
  41.                     }
  42.                     
  43.                     if ($parts[0] == 'OCORRENCIA') {
  44.                         $objTmp->OCORRENCIA->setValue($field->getValue());
  45.                     }
  46.                     
  47.                     $new_list[$id] = $objTmp;
  48.                     
  49.                 } 
  50.             }
  51.             
  52.             TSession::setValue('sel_objects'$new_list); // put the array back to the session
  53.             
  54.             $this->onReloadfunc_get_arg(0) );
  55.             
  56.             new TMessage('info''Todas as contas foram atualizadas!');
  57.             TTransaction::close();
  58.         }
  59.         catch (Exception $e)
  60.         {
  61.             // show the message
  62.             new TMessage('error'$e->getMessage());
  63.         }
  64.     } ?>
AN

Show de bola Eliezer, ótimo artigo.
FC

Show de bola Eliiezer

Parabéns !!!
PD

Parabéns Eliezer,

Cara ficou muito bonito!

Abraço,
Pablo
VF

Eliezer,

Ficou show!!!
BJ

Alto nível, fora de série!

Parabéns!
ES

Valeu pessoal! Já, já, vou postar o resultado com a nova versão do framework e, claro, usando outros recursos que agora temos à disposição.
FM

Ola Eliezer... Como vc fez par colocar os componentes na datagrid ?
ES

A forma que eu fiz está tudo ai no código, só não coloquei a definição da Datagrid porque é irrelevante, basta declarar normalmente e colocar todos os campos porque esses serão substituídos no onReload.
FM

Ahhhhhhh , então eu vi certo, ele redefine os campos e os torna componentes no onReload. Valeu Eliezer.
PD

Sugestão:

$id = end($parts);
AJ

Ola Amigo parabéns poderia dar a dia de como fez o CAMPO DATA. Esse tipo de exibição para escolha da data no padrao Brasileiro.
EM

Olá Apolonio, obrigado!

Basta , logo após a declaração do seu campo como Tdate, colocar um setMask("dd/mm/yyyy");
RC

Eliezer Morais,
teria como postar o código inteiro da Página que contem esta DataGrid?
LG

Olá Eliezer, já atualizou o código com a versão 4.0? poderia disponibilizar o novo código?