Definir um valor padrão para o TCombo no evento onClear Boa tarde. Gostaria de saber a possibilidade de definir um valor padrão para um componente TCombo no evento onClear, eu consegui habilitar e desabilitar porem definir por exemplo o primeiro item para ficar padrao apos o form ser limpo. public function onClear( $param ) { $this->form->clear(); TCombo::enableField('form_Pessoa', 'tipo'); TCombo:: setId(...
FP
Definir um valor padrão para o TCombo no evento onClear  
Fechado
Boa tarde.
Gostaria de saber a possibilidade de definir um valor padrão para um componente TCombo no evento onClear, eu consegui habilitar e desabilitar porem definir por exemplo o primeiro item para ficar padrao apos o form ser limpo.
public function onClear( $param )
{
$this->form->clear();
TCombo::enableField('form_Pessoa', 'tipo');
TCombo:: setId('form_Pessoa', 'tipo2','2');
//aqui definifir valor padrao para o combo
}

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


MG

Já tentou

 
  1. <?php
  2. $lista = TCombo('lista');
  3. $combo_items = array();
  4. $combo_items['0'] ='Selecione';
  5. $lista->addItems($combo_items);
  6. ?>
FP

o Combo esta preenchido devidamente, no construtor do formulário, eu preciso definir definir no evento onclear um item como default para evitar que o usuário esqueca de atribuir, no evento de construcao do formulario eu tenho o seguinte codigo
$item2Tipo= array();
$item2Tipo['2'] = 'Real';
$item2Tipo['1'] = 'Ouro';
$tipo2->addItems($item2Tipo);
$tipo2->setsize(90);
$tipo2->setValue('2');
porem quando invoca o evento onclear ele limpa e isso que preciso corrigir
MG

Fernando

Crie um método que preencha o combo e chame após o clear.
Não resolve?
Ele será chamado ao montar a tela e ao limpar o form.
FP

poderia me dar um exemplo desse metodo, me perco muito ainda com os objetos onde posso ou nao acessa-los
MG

Dentro da sua classe e chame ele após limpar o form:

 
  1. <?php
  2. function carregarCombo() {
  3. $item2Tipo= array();
  4. $item2Tipo['2'] = 'Real';
  5. $item2Tipo['1'] = 'Ouro';
  6. $tipo2->addItems($item2Tipo);
  7. $tipo2->setsize(90);
  8. $tipo2->setValue('2');
  9. }
  10. ?>
FP

Tentei sua dica marcelo porem tive o seguinte erro
Fatal error: Call to undefined function carregarCombo() in C:\xampp\htdocs\goldpro\app\control\PessoaForm.php on line 281
meu codigo ficou dessa form
 
  1. <?php
  2. private function carregarCombo()
  3. {
  4. $item2Tipo= array();
  5. $item2Tipo['2'] = 'Real';
  6. $item2Tipo['1'] = 'Ouro';
  7. $tipo2->addItems($item2Tipo);
  8. $tipo2->setsize(90);
  9. $tipo2->setValue('2');
  10. }
  11. /**
  12. * Clear form data
  13. * @param $param Request
  14. */
  15. public function onClear( $param )
  16. {
  17. $this->form->clear();
  18. carregarCombo();
  19. TCombo::enableField('form_Pessoa', 'tipo');
  20. }
  21. ?>
MG

Coloque a novo método depois do método onClear, mas já tentou colocar incluir o código de carregamento após $this->form->clear()?
FP

Resolvi o problema
o segredo esta no metodo de recarregar o combo, pelo que entendi fora doconstrutor eu nao posso usar diretamente o componente, preciso invocar a classe passar o formulario e o nome do componente dentro do formulario com o conteudo a ser alterado.
ex: TCombo::reload('form_Pessoa', 'tipo', $itemTipo);
 
  1. <?php
  2. private static function carregarCombo()
  3. {
  4. $itemfisjur = array();
  5. $itemfisjur['2'] = 'Física';
  6. $itemfisjur['1'] = 'Jurídica';
  7. TCombo::reload('form_Pessoa', 'fisjur', $itemfisjur);
  8. $itemTipo= array();
  9. $itemTipo['C'] = 'Cliente';
  10. $itemTipo['F'] = 'Funcionario';
  11. $itemTipo['O'] = 'Fornecedor';
  12. TCombo::reload('form_Pessoa', 'tipo', $itemTipo);
  13. //mudado para onedit e onclear
  14. $itemStatus= array();
  15. $itemStatus['1'] = 'Ativo';
  16. $itemStatus['2'] = 'Inativo';
  17. TCombo::reload('form_Pessoa', 'status', $itemStatus);
  18. //combo tipo de moeda de fechamento
  19. $item2Tipo= array();
  20. $item2Tipo['2'] = 'Real';
  21. $item2Tipo['1'] = 'Ouro';
  22. TCombo::reload('form_Pessoa', 'tipo2', $item2Tipo);
  23. //combo bloqueia limite
  24. $itembloqueialimite= array();
  25. $itembloqueialimite['2'] = 'Sim';
  26. $itembloqueialimite['1'] = 'Não';
  27. TCombo::reload('form_Pessoa', 'bloqueialimite', $itembloqueialimite);
  28. }
  29. /**
  30. * Clear form data
  31. * @param $param Request
  32. */
  33. public function onClear( $param )
  34. {
  35. $this->form->clear();
  36. $this->carregarCombo();
  37. TCombo::enableField('form_Pessoa', 'tipo');
  38. }
  39. ?>
MG

Excelente. Que bom que conseguiu!
Abraços
FP

Muito obrigado pela atenção valeu mesmo, vc tem consguido trabalhar com o google maps no adianti?
MG

Ainda não implementei nada com Google maps
PD

Fernando,

Você não precisa necessariamente usar o método estático TForm::sendData(), que gera um Javascript em tempo de execução.
Esse método é mais recomendado para eventos de saída e alteração (exit, change) de campos, quando o formulário já está renderizado e é necessário gerar somente o Javascript de alteração.

Antes de executar o método show(), ou seja, antes de renderizar o formulário em tela, você pode mudar seus valores simplesmente usando o $this->form->setData(), desta maneira a seguir.
Este método preenche "em memória" os valores dos atributos do objeto. Então, quando ele chegar no show(), já saberá quais são os seus valores de campos.

 
  1. <?php
  2. class XYZ
  3. {
  4. public function __construct()
  5. {
  6. // ...
  7. $this->form->addQuickAction('Clear', new TAction(array($this, 'onClear')), 'ico_new.png');
  8. }
  9. public function onClear()
  10. {
  11. $this->form->clear();
  12. $data = new StdClass;
  13. $data->description = 'digite aqui...';
  14. $data->list = 'a';
  15. $this->form->setData($data);
  16. }
  17. }
  18. ?>
FP

Pablo,
Desculpa a demora em responder, irei fazer um teste e reporto o resultado aqui assim que possível muito obrigado.