Iterar no TDataGrid Prezados boa tarde, Estou desenvolvendo uma nova funcionalidade no meu sistema, que utiliza um TDataGrid, e preciso iterar neste grid para gravar os dados contidos nele. Pesquisando nos exemplos do Adianti, no livro e no forum não achei um exemplo que mostre como fazer isto. Alguém tentou fazer algo semelhante para mostrar-me?...
CG
Iterar no TDataGrid  
Fechado
Prezados boa tarde,

Estou desenvolvendo uma nova funcionalidade no meu sistema, que utiliza um TDataGrid, e preciso iterar neste grid para gravar os dados contidos nele.

Pesquisando nos exemplos do Adianti, no livro e no forum não achei um exemplo que mostre como fazer isto.

Alguém tentou fazer algo semelhante para mostrar-me?

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


AS

não entendi explica melhor
CG

Bom dia Alexandre,

Tenho um TDatagrid que possui, por exemplo, 10 registros.

Ele foi carregado utilizando o objeto STDClass, ou seja, os dados contido neste Grid não foram carregados por um Model.

O que eu preciso é recuperar as linhas deste grid para gravá-los no banco banco de dados, porém não sei como fazer isso.
AS

posta o codigo
RR

Carlos, não sei se é a melhor solução, mas você pode criar um array de objetos. Na medida que for preenchendo cada linha do TDataGrid você incrementa esse array com o objeto atual.

Não sei como está montada essa parte da sua aplicação, mas talvez você precise colocar esse array de objetos em sessão (TSession).

Com esse array de objetos populado, você instancia um Active Record, faz um loop nesse array (foreach) e vai dando "store()" linha a linha do array...

Como disse, não sei se é a melhor opção, acho que funcionaria!
PD

Oi Carlos,

Anotei aqui para implementar um getItems() na Datagrid. Acredito que ajudaria neste cenário.

Abraço,
Pablo
CG

Fala Pablo,

Fico feliz por ajudar a melhorar o Adianti.

Enquanto a melhoria não chega, resolvi o meu problema implementando da maneira que o Rafael comentou.

Segue o código para quem precisar.

 
  1. <?php
  2. class FaturaReceberForm extends TPage
  3. {
  4. private $parcelas;
  5. //CODIGO DA CLASSE
  6. function calcularParcelas()
  7. {
  8. try
  9. {
  10. // open a transaction with database 'sollus'
  11. TTransaction::open('sollus');
  12. $this->parcelas = array();
  13. $object = $this->form->getData('FaturaReceber');
  14. $this->form->validate();
  15. $valortotal = Util::converterNumero($object->valor);
  16. $valor = 0;
  17. $qtdparcelas = (int) $object->qtdparcelas;
  18. $formapagamento = new FormaPagamento($object->formapagamento_id);
  19. $this->datagrid->clear();
  20. for ($n=1; $n<=$qtdparcelas; $n++)
  21. {
  22. // add an regular object to the datagrid
  23. $item = new StdClass;
  24. $item->parcela_id = NULL;
  25. $item->numero = $n;
  26. $item->databaixa = NULL;
  27. $valorparcela = $valortotal / $qtdparcelas;
  28. $valor += Util::truncarValor($valorparcela);
  29. if ($n == $qtdparcelas){
  30. $item->valorparcela = $valorparcela + ($valortotal - $valor);
  31. $item->valorparcela = Util::truncarValor($item->valorparcela);
  32. }else{
  33. $item->valorparcela = Util::truncarValor($valorparcela);
  34. }
  35. $item->valorparcela = Util::converterNumero($item->valorparcela,TRUE,2);
  36. $this->datagrid->addItem($item);
  37. $this->parcelas[] = $item;
  38. TSession::setValue('parcelas',$this->parcelas);
  39. }
  40. $this->notebook->setCurrentPage(1);
  41. $this->form->setData($object);
  42. TTransaction::close();
  43. }
  44. catch (Exception $e) // in case of exception
  45. {
  46. // shows the exception error message
  47. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  48. // undo all pending operations
  49. TTransaction::rollback();
  50. }
  51. }
  52. function onSave()
  53. {
  54. try
  55. {
  56. TTransaction::open('sollus');
  57. $object = $this->form->getData('FaturaReceber');
  58. $this->form->setData($object);
  59. $this->form->validate();
  60. $this->parcelas = TSession::getValue('parcelas');
  61. //CÓDIGO DA FUNCTION
  62. $object->addFaturaParcela($this->parcelas);
  63. $object->store();
  64. if ($this->parcelas)
  65. {
  66. foreach ($this->parcelas as $parcela)
  67. {
  68. $faturaparcela = new StdClass;
  69. $faturaparcela->parcela_id = $parcela->parcela_id;
  70. $faturaparcela->numero = $parcela->numero;
  71. $faturaparcela->vencimento = $parcela->vencimento;
  72. $faturaparcela->valorparcela = $parcela->valorparcela;
  73. $faturaparcela->databaixa = $parcela->databaixa;
  74. $this->datagrid->addItem($faturaparcela);
  75. }
  76. }
  77. TSession::setValue('parcelas',array());
  78. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  79. TTransaction::close();
  80. }
  81. }
  82. catch (Exception $e) // in case of exception
  83. {
  84. // shows the exception error message
  85. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  86. // undo all pending operations
  87. TTransaction::rollback();
  88. }
  89. }
  90. function onEdit($param)
  91. {
  92. try
  93. {
  94. if (isset($param['key']))
  95. {
  96. // get the parameter $key
  97. $key=$param['key'];
  98. // open a transaction with database 'sollus'
  99. TTransaction::open('sollus');
  100. // instantiates object Aeroporto
  101. $object = new FaturaReceber($key);
  102. //CODIGO DA FUNCTION
  103. $faturaparcela = $object->get_FaturaParcela();
  104. $this->parcelas = array();
  105. if ($faturaparcela){
  106. foreach($faturaparcela as $parcela){
  107. $objparcela = new StdClass;
  108. $objparcela->parcela_id = $parcela->id;
  109. $objparcela->fatura_id = $parcela->fatura_id;
  110. $objparcela->numero = $parcela->numparcela;
  111. $objparcela->vencimento = TDateSollaris::date2br($parcela->vencimento);
  112. $objparcela->valorparcela = Util::converterNumero($parcela->valor,TRUE);
  113. $objparcela->databaixa = TDateSollaris::date2br($parcela->databaixa);
  114. $this->datagrid->addItem($objparcela);
  115. $this->parcelas[] = $objparcela;
  116. }
  117. TSession::setValue('parcelas',$this->parcelas);
  118. }
  119. //CODIGO DA FUNCTION
  120. // close the transaction
  121. TTransaction::close();
  122. }
  123. else
  124. {
  125. $this->form->clear();
  126. TSession::setValue('parcelas',array());
  127. }
  128. }
  129. catch (Exception $e) // in case of exception
  130. {
  131. // shows the exception error message
  132. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  133. // undo all pending operations
  134. TTransaction::rollback();
  135. }
  136. }
  137. }
  138. ?>