Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Botão alterar do grid

31 de Janeiro de 2013, 21:02 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 29 vezes

 Boas noites,

 Estou tentando fazer funcionar a opção Alterar do grid, mas quando coloco o código dentro de um if ele não funciona.

Tenho um campo do tipo select, que quando o usuário escolhe um tipo de documento dou um reload na página, porém eu gostaria que ao clicar no botão alterar ele já carregasse esse form, mas não funciona.

Vejam meu código.

if($frm->get('tipo')) {
            $frm->addHiddenField('id_usuario', $_SESSION[APLICATIVO]['usuario']['id_usuario']);
            $valores = TPDOConnection::executeSql('SELECT uf FROM regioes_brasil ORDER BY uf');
            $frm->addSelectField('ufemissao', 'Estado:', false, $valores);//, null, null, null, false, null, null, 'Selecione uma empresa', '', null, null, null);
            $frm->addSelectField('localemissao','Cidade:',null, null,true);
            $frm->combinarSelects('ufemissao','localemissao','regioes_brasil','uf','cidade','cidade','-- Cidade --','0','Nenhuma cidade ');
            $frm->addDateField('dataemissao', 'Emissão:', true);
           
            if($frm->get('tipo') == 'RESERVISTA') {
                $frm->addTextField('regiaomilitar','Região Militar:',100,true,50,null,null,null);
                $frm->addNumberField('numero', 'Número:', 20, true, 0)->setTooltip($strTitle, 'Somente números');
            }
            if($frm->get('tipo') == 'CARTEIRA PROFISSIONAL') {
                $frm->addTextField('serie','Série:',100,true,50,null,null,null);
                $frm->addNumberField('numero', 'Número:', 20, true, 0)->setTooltip($strTitle, 'Somente números');
            }
            if($frm->get('tipo') == 'CNH') {
                $frm->addSelectField('categoria','Categoria:',null,"A=A,B=B,C=C,D=D,E=E,AB=AB,AC=AC,AD=AD,AE=AE",true);
                $frm->addDateField('datavalidade', 'Nascimento:', true);
                $frm->addNumberField('numero', 'Número:', 20, false, 0)->setTooltip($strTitle, 'Somente números');
            }
            if($frm->get('tipo') == 'RG') {
                $frm->addNumberField('numero', 'Número:', 20, true, 0)->setTooltip($strTitle, 'Somente números');
            }
            //botão salvar ajax
            $frm->addButtonAjax('Salvar', null, 'fwValidateFields()', 'depoisSalvar', 'salvar', 'Salvando', 'text', false, null, 'btnGravar', null, true,false);
}

// campo html para exibir o gride com os perfis já cadastrados
$frm->addHtmlField('html_gride', '');

// processar as ações do formulário que estão na pasta action/
$frm->processAction();

// Executar a função javascript de inicialização do formulário
$frm->addJavascript('inicializar()');

// exibir o formulário
$frm->show();
?>

<script>
function inicializar()
{
    atualizar_gride();
}
function alterar(campos,valores)
{
    fwUpdateFields(campos,valores);
    jQuery("#formdin_body").css('background-color','#ffffff');
}

 

[]'s

Autor: Everton Murilo Rodrigues Silva


88 comentários

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    1 de Fevereiro de 2013, 12:48

     

    Everton,

    pelo que pude enteder, o formulário é montado passando pelo if() e quando a ação é a Alterar do gride ele não passa. Veja então se no parametro $mixUpdateFields do grid voce está informando o campo "tipo", para que o gride atualize este campo antes de submeter o form e não esqueça que nos dados do gride tem que ter o campo "tipo" retornando do banco.

    Abraço.

    • Bfad1e926a8f3039e7359a6c3c876de2?only path=false&size=50&d=404Everton Murilo Rodrigues Silva(usuário não autenticado)
      1 de Fevereiro de 2013, 14:19

       

      Luís, boa tarde, Realmente, eu não estava passando o campo TIPO no vetor $mixUpdateFields.

      Agora ele já carrega os dados, exceto a cidade. Não sei se é porque eu estou usando o combinarSelects,  mas ao clicar em alterar ele carrega os dados, carrega o estado, mas não traz a cidade que está no banco... Alguma idéia?

      Obrigado.

      • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
        3 de Fevereiro de 2013, 1:09

         

        Everton,

        o problema dever ser o select combinado mesmo, pois os campos selects só funcionam quando já possuem as options definidas e como ele depende de outro e ainda está vazio, o gride tenta definir o valor e não consegue. Para solucionar isso, crie um campo oculto no form com o mesmo nome do campo select filho ( localemissao) terminado com "_temp", ficando assim: localemissao_temp por exemplo, assim este campo vai guardar o valor temporario da cidade que alimentará o select combinado filho quando ele terminar de ser preenchido.

        Caso você não esteja submetendo a pagina no botão Alterar, então voce tem que chamar o evento change do campo ufemissao depois de fwUpdateFields(),

        assim:

        function alterar(campos,valores)
        {
            fwUpdateFields(campos,valores);
            jQyery("#ufemissao").change(); // para carregar as cidades
            jQuery("#formdin_body").css('background-color','#ffffff');

        Abraço.

        • Bfad1e926a8f3039e7359a6c3c876de2?only path=false&size=50&d=404Everton Murilo Rodrigues Silva(usuário não autenticado)
          4 de Fevereiro de 2013, 19:26

           

          Luís, boa noite,

           Assim, funcionou, mas só dá certo se já tiver selecionado um tipo qualquer no select.

          Ou seja, assim que eu acesso a página, se clicar direto em alterar, antes de selecionar qualquer tipo de documento, os campos não são preenchidos.

          Alguma idéia?

          Obrigado.

          • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
            4 de Fevereiro de 2013, 21:40

             

            Everton,

            realmente, sem os campos no formulário a função fwUpdateFields não funciona. A solução para isso será voce esconder/mostrar os campos no evento onchange do campo tipo, sem submeter a pagina, mas com jquery mesmo, sendo que ao esconde-los voce tem que limpá-los tambem.

            Abraço.

            • 4210951d8ebd1c937e4efe1938358d3f?only path=false&size=50&d=404Leandro Santos(usuário não autenticado)
              27 de Fevereiro de 2013, 21:05

               

              Luis e Everton,

              Estou praticamente com o mesmo problema, tenho um select combinado de UF x Cidade, quando clico no alterar no grid apenas a UF é atualizada na aba cadastro.

              Vocês conseguiram resolver? Poderiam postar um exemplo da solução?

              Obrigado.

              • Bfad1e926a8f3039e7359a6c3c876de2?only path=false&size=50&d=404Everton Murilo Rodrigues Silva(usuário não autenticado)
                4 de Março de 2013, 14:26

                 

                Leandro,

                Fiz da forma que o Luis indicou. Criei uma função JQuery que oculta todos os campos e outra função que, de acordo com o tipo escolhido mostra os respectivos campos.

                Já na função alterar chamo a função jQyery("#ufemissao").change() para carregar as cidades.

                []'s

                • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
                  8 de Março de 2013, 23:14

                   

                  Leando,

                  sempre que for necessário atualizar campos selects combinados, como o select filho ainda não está preenchido, não podemos definir o seu valor, então precisamos jogar o valor em um campo auxiliar temporário. O formDin utiliza por padrão o campo terminado com "_temp", então para atualizar a uf e o municipio combinado, siga os passos:

                  1) atualizar o valor do campo uf;

                  2) atualizar o valor do campo municipio_temp; ( deve ser criado no form como campo oculto )

                  3) chamar o método change() do campo uf, conforme o Everton escreveu: jQyery("#campoUf").change();

                  Assim deverá funcionar.

                  Abraço.

Essa comunidade não possui posts nesse blog