MF
Clone de Linha
Bom dia!
Tenho um TListField onde desabilito alguns campos da linha, porem ao adicionar mais linhas ( clonar ) ele clona a linha com os campos desabilitados.
Teria uma forma de criar a linha sempre "limpa" para digitação?
aguardo obrigado.
Tenho um TListField onde desabilito alguns campos da linha, porem ao adicionar mais linhas ( clonar ) ele clona a linha com os campos desabilitados.
Teria uma forma de criar a linha sempre "limpa" para digitação?
aguardo obrigado.
Estive um problema semelhante a alguns dias! Posta seu código aqui que vou tentar te ajudar!
A ação de clonar faz uma cópia da última linha.
Você pode alterar esse comportamento via javascript através da função setCloneFunction da TFieldList.
Segue a baixo o função de editar, onde ocorre o problema ao adicionar uma nova linha ( $this->relatorio_list->addCloneAction(); )
function onEdit($param)
{
try
{
TTransaction::open('rdv');
if (isset($param['key']))
{
TButton::disableField('form_RelEdit', 'btn_limpar');
$objeto = new stdClass;
$objeto->dt = date('d/m/Y');
$this->relatorio_list->addDetail( $objeto );
$key = $param['key'];
$relatorio = new Relatorio($key);
$relatorio->dt_ini = TDate::date2br($relatorio->dt_ini);
$relatorio->dt_fim = TDate::date2br($relatorio->dt_fim);
if($relatorio->dt_fim)
{
TButton::disableField('form_RelatorioEdit', 'btn_salvar');
TButton::disableField('form_RelatorioEdit', 'btn_limpar');
TButton::disableField('form_RelatorioEdit', 'btn_encerrar');
TText::disableField('form_RelatorioEdit', 'obs');
}
$this->form->setData($relatorio);
$this->relatorio_list->addHeader();
$relatorio_itens = $relatorio->get_relatorioitens();
if ($relatorio_itens)
{
foreach($relatorio_itens as $item )
{
$item->item_id = $item->id;
$item->dt = TDate::date2br($item->dt);
$item->despesa_id = $item->despesa_id;
$item->valor = $item->vl_unit;
$item->qtde = $item->qtde;
$item->vl_total = $item->vl_unit * $item->qtde;
$item->situacao = $item->situacao;
$row = $this->relatorio_list->addDetail($item);
if (($item->situacao == 'A') OR ($item->situacao == 'R'))
{
$row->del($row->get(count($row->getChildren())-1)); // deleta último elemento da linha - botão excluir
$row->get(1)->get(0)->setEditable(false); //desabilita a coluna data
$row->get(2)->get(0)->setEditable(false); //desabilita a coluna despesa
$row->get(3)->get(0)->setEditable(false); //desabilita a coluna valor
$row->get(4)->get(0)->setEditable(false); //desabilita a coluna qtde
}
}
$this->relatorio_list->addCloneAction();
}
}
else
{
$this->onClear($param);
}
TTransaction::close(); // close transaction
}
catch (Exception $e) // in case of exception
{
new TMessage('error', $e->getMessage());
TTransaction::rollback();
}
}
Nataniel tudo bem? Terias um exemplo de javascript através da função setCloneFunction.
Eu precisaria que ao adicionar a linha venha sempre editável, como minha ultima linha tem campos desabilitados esses campos são clonados.
Certo eriklesbr, toda ajuda é bem vinda.
Veja o exemplo abaixo:
https://www.adianti.com.br/forum/pt/view_5297?campo-ttext-repetindo-conteudo-em-
Nesse caso o javascript limpa o último campo de texto, você precisa adaptar para tornar os campos editáveis.
Nataniel, bom dia!
Estou tentando fazer de outra forma mais simples, porem nas linhas onde fica habilitado no "botão de excluir" ele não exclui a linha só limpa os campos.
Você consegue 'correr' o olho no código acima não sei se consegue entender?
Olá, Nataniel tudo bem?
Terias alguma dica?
Alguma mensagem de erro javascript no console do navegador? Esse deveria ser o comportamento somente na última linha do fieldlist, evitando a exclusão do último detalhe.
Natiniel tudo bem?
Pelo que vi meu problema está nesse trecho abaixo, se olhares o código acima, eu adicionei o mesmo para que na edição crie uma linha com os campos em branco e editável ( a data já carrega a data corrente ), só que dessa forma não deixa excluir a linha, só limpa os campos da linha.
Sem esse trecho, como minha ultima linha tem campos desabilitados ao adicionar uma nova linha é clonado a linha com campos desabilitados...entende?
$objeto = new stdClass;
$objeto->dt = date('d/m/Y');
$this->relatorio_list->addDetail( $objeto );
Nataniel tudo bem?
Pelo que vi meu problema está nesse trecho abaixo, se olhares o código acima, eu adicionei o mesmo para que na edição crie uma linha com os campos em branco e editável ( a data já carrega a data corrente ), só que dessa forma não deixa excluir a linha, só limpa os campos da linha.
Sem esse trecho, como minha ultima linha tem campos desabilitados ao adicionar uma nova linha é clonado a linha com campos desabilitados...entende?
$objeto = new stdClass;
$objeto->dt = date('d/m/Y');
$this->relatorio_list->addDetail( $objeto );
Nataniel tudo bem? Consegue ajudar? Aguardo obrigado.
Tente chamar "$this->relatorio_list->addHeader();" antes de chamar "$this->relatorio_list->addDetail( $objeto );"
Nataniel, boa tarde!
Nesse teste o $this->relatorio_list->addDetail( $objeto ) adiciona a linha no início ( primeira linha ). aí não resolve..pois na edição de registros ele clona a ultima linha com campos desabilitados.
Não sei se entendi. Nesse caso não é só adicionar essa linha após o foreach dos itens?
Nataniel exatamente, dessa forma permite a exclusão da linha.
muito obrigado pelo apoio.
Nataniel desculpa acabei me precipitando, dessa forma na Edição ele já adiciona a linha com os campos bloqueados ( herdados da linha de cima)
Nesse caso é só usar a função setEditable(passando true ao invés de false) para habilitar os campos:
Nataniel obrigado pelo prestativo apoio.