Ir para o conteúdo

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

Link na Linha da Grid

11 de Outubro de 2012, 7:17 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 14 vezes

Bom dia a todos

Sera que alguem poderia me ajudar??

Estou precisando colocar um link na linha da Grid para chamar (habilitando) uma nova aba com os dados do curso selecionado por exemplo.

E também conseguir editar alguns campos mostrados na grid.

Agradeço a todos vocês,

 

 

Autor: Arildo Rabis Diniz


99 comentários

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    11 de Outubro de 2012, 13:35

     

    Arildo,

    o gride não possui coluna do tipo link, para fazer isso voce terá que utilizar o evento onDrawcell para tratar a celula adicionando um link em seu conteudo.

    Para adicionar o evento onDrawCell utilize o metodo setOnDrawCell da classe TGrrid:

    Exemplo: $gride->setOnDrawCell()('minhaFuncaoPhp');

    e então crie a função minhaFuncaoPhp assim:

    function minhaFuncaoPhp($rowNum,$cell,$objColumn,$aData,$edit)
    {
        if($objColumn->getFieldName() == 'XXX_LINK')
        {
        $cell->setValue('<a>Link Aqui</a>');
        }
    }

    Para ilistrar mais a utilização da classe TGrid, de uma olhada na aplicação "Aplicação para Gerenciar Usuários, Perfis, Módulos e Menu", que está nos exemplos para download.

     Para  editar campos no gride voce terá que utilizar o método $gride->addTextColumn. para criar criar os inputs.

    Exemplo:

    $gride->addTextColumn('nm_tabela','Nome da Tabela','NM_TABELA',80,80);

    Abraço.

    • Cf36b072c6ae73108a30cf8c67aafb31?only path=false&size=50&d=404Arildo Rabis Diniz(usuário não autenticado)
      15 de Outubro de 2012, 8:43

       

      Bom dia Luiz

      Obrigado pela presteza na ajuda.

      Eu consegui fazer o link e a edição, mas ainda ficaram algumas duvidas, no caso eu listo na grid uma tabela de cursos por exemplo, dai gostaria de manter um link chamando uma aba no mesmo form em que mostro os alunos do curso selecionado, que sera passado como parametro.

      A outra é com relação a edição, preciso que os campos da tabela apareçam na grid e devo editar apenas um deles. Quando coloco

       $gride->addTextColumn('nm_tabela','Nome da Tabela','NM_TABELA',80,80);  aparece na grid apenas o campo informado

      Desde já agradeço a atenção.

      Abraços

      • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
        16 de Outubro de 2012, 23:10

         

        Arildo,

        não sei se entendi direito mas vou tentar explicar.

        Para voce selecionar uma aba no link voce tem executar a função javascript fwSelecionarAba(id_da_aba), então quando voce for criar o link no evento ondrawcell do grid assim assim <a href="javascript:void(0)" onclick="selecionarCurso(id_do_curso)">Selecionar</a> onde o id_do_curso voce vai substituir pelo valor que vier do banco de dados, então se o sua coluna na tabela for ID_CURSO, ficaria assim:

        'onclick="selecionarCurso('.$aData['ID_CURSO'].')">Selecionar</a>'

        e no final do form, depois da tag ?> voce criaria a função selecionarCurso() para selecionar a aba, alimentar o campo oculto id_cursor do formulário, definir a ação "lerAlunosCurso" e submeter o formulário para que carrege os alunos do curso, já que voce não está utilzando ajax, que neste caso seria uma boa solução.

        A Função seria assim:

        function selecionarCurso(id_curso)

        {

        jQuery("#id_curso").val(id_curso);
        fwSelecionarAba('abaCursos');
        fwDoAction('lerAlunosCurso');

        }

        Na ação lerAlunosCurso voce alimenta o gride com os alunos do curso selecionado.

        Quanto a edição do campo no gride,  voce pode adicionar quantos campos quiser, sendo que o editavel será apenas o que tiver addTextField os outros serão com addColumn normal mesmo.

        espero ter ajudado.

        Abraço.

        • Cf36b072c6ae73108a30cf8c67aafb31?only path=false&size=50&d=404Arildo Rabis Diniz(usuário não autenticado)
          18 de Outubro de 2012, 8:18

           

          Luiz me desculpe a insistência, mas ainda não consegui resolver aquele problema.
          Neste caso abaixo, ele me mostra apenas a ultima coluna as outras não aparecem, fiz varias tentativas e não consegui. Se não for abusar da sua paciência.
          E também o link não consegui fazer ele funcionar, nem mesmo aparecer como um link na grid.

          Abraços e obrigado pela ajuda e paciência comigo.

          $g = new TGrid(
          'gd' // id do gride no html
          ,'Listagem dos Cursos' // titulo do gride
          ,cursosDao::selectAll('descricao') // array de dados
          ,null
          ,null
          ,'CODIGO'); // chave da tabela);
          $g->addTextColumn('cursos','Curso','DESCRICAO',20,20,'','','','no');
          $g->addTextColumn('cursos','Coordenador','COORDENADOR',10,10,'','','','no');

          // adicionando o objeto ao campo html criado acima
          $frm->set('html_gride',$g); // ou $frm->getField('gride')->add($g);

          • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
            19 de Outubro de 2012, 16:33

             

            Arildo, 

            tá meio confuso entender o seu projeto ou o que você está pretendendo fazer. Tente descrever todo o processo do formulário para que eu possa lhe ajudar ou até mesmo criar um exemplo sem acesso a banco mesmo.

            O problema do gride que voce me enviou é que as colunas devem ter nomes diferentes, voce criou todas com 'cursos', e tambem no parametro readOnly voce está passando 'no' e tem que ser true ou false. Segue abaixo as correções:

            $g = new TGrid( 'gd' // id do gride no html
                ,'Listagem dos Cursos' // titulo do gride
                ,cursosDao::selectAll('descricao') // array de dados
                ,null ,null ,'CODIGO'); // chave da tabela);
            $g->addTextColumn('descricao'    ,'Curso'        ,'DESCRICAO',20,20,'','','',false);
            $g->addTextColumn('coordenador'    ,'Coordenador'    ,'COORDENADOR',40,40,'','','',false); // adicionando o objeto ao campo html criado acima
            $frm->set('html_gride',$g);

            Abraço.

            • Cf36b072c6ae73108a30cf8c67aafb31?only path=false&size=50&d=404Arildo Rabis Diniz(usuário não autenticado)
              29 de Outubro de 2012, 10:00

               

              Bom dia Luis

              $g->addTextColumn('coordenador' ,'Coordenador' ,'COORDENADOR',40,40,'','','',false);

              Quando faço isso, na grid aparece apenas o campo acima, os campos do Select não aparecem. E na verdade eu quero que apareçam todos e apenas um seja editavel.

              E com relação ao link também não consegui ainda fazer funcionar.

              Agradeço sua atenção e de todos do forum.

               

               

               

              • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
                29 de Outubro de 2012, 18:04

                 

                Arildo,

                me envie o codigo fonte do gride que você esta criando, acho que assim posso lhe ajudar mais facilmente.

                Abraço.

                • Cf36b072c6ae73108a30cf8c67aafb31?only path=false&size=50&d=404Arildo Rabis Diniz(usuário não autenticado)
                  30 de Outubro de 2012, 10:30

                   

                  Bom dia Luiz

                  A ideia é listar na primeira ABA uma grid com os Alunos, onde clicando em um aluno abrira uma outra ABA com os cursos que ele esteja Matriculados, clicando no curso abre uma outra grid com as disciplinas e escolhendo uma disciplina abrira uma outra ABA para lançamento das notas e frequência.

                  Não sei se consegui me explicar, mas te agradeço o interesse e a presteza no auxilio a todos que necessitam neste forum.

                  Abraços

                   

                   

                  <?php

                  $frm = new TForm('Cadastro de Alunos');

                  // adicionar o campo hidden para a coluna chave da tabela.

                  $frm->addHiddenField('codigo');

                  // adicionando abas ao formulário

                  $pc = $frm->addPageControl('pc'); // criar instância do controlador de páginas

                  // adicionar a pagina "Cadastro"

                  $pc->addPage('Cadastro',true,true,'abaCadastro'); // a partir daqui, tudo que for

                  //adicionado ao form ficará dentro da aba até encontrar o metodo closeGroup();

                  // adicionar os campos na aba cadastro

                  //$frm->addMaskField('placa','Nº da Placa:',true,'aaa-9999');

                  $frm->addTextField('nome','Nome:',100,true,80);

                  $frm->addTextField('endereco','Endereço:',100);

                  $frm->addTextField('bairro','Bairro:',50);

                  $frm->addNumberField('cep','CEP:',10);

                  $frm->addTextField('cidade','Cidade:',50);

                  $frm->addSelectField('cod_uf','Estado:',2);

                  //$frm->addTextField('sig_uf','Estado:',2);

                  $frm->addDateField('nascimento','Data Nascimento:',false);

                  $frm->addMemoField('observacao','Observações:',2000,false,60,4);

                  $frm->addButton('Salvar','salvar','btnSalvar',null,null,true,false);

                  $frm->addButton('Limpar','limpar','btnLimpar',null,null,false,false);

                  // para exemplificar o uso do campo html e da inclusão de um arquivo css externo

                  $frm->addHtmlField('mensagem','<br><center><b><span class="FonteVermelha">Campos em vermelho são de preenchimento obrigatório</span></b></center>');

                  // adicionar a aba Listagem

                  $pc->addPage('Listagem');

                  $frm->addHtmlField('html_gride','Aqui será carregado o gride');

                  $pc->addPage('Cursos Matriculados',true,true,'abaMatriculas'); // a partir daqui, tudo que for

                  //$pc->addPage('abaMatriculas');

                  $frm->addHtmlField('html_gride1','Aqui será carregado o gride');

                  // processar as ações do diretório action/

                  // criarção do gride

                  $g = new TGrid(

                  'gd' // id do gride no html

                  ,'Listagem dos Alunos' // titulo do gride

                  ,alunosDao::selectAll('nome') // array de dados

                  //,''

                  ,null

                  ,null

                  ,'codigo'); // chave da tabela);

                  $frm->set('html_gride',$g); // ou $frm->getField('gride')->add($g);

                  $g1 = new TGrid(

                  'gd' // id do gride no html

                  ,'Cursos Matriculados' // titulo do gride  

                  ,TPDOConnection::executeSql('select a.codigo,b.descricao as Curso,c.descricao,c.turno from matriculas a, turmas c, cursos b where a.cod_curso = b.codigo and a.cod_turma = c.codigo and a.cod_aluno = 4')

                  //,''

                  ,null

                  ,null

                  ,'codigo'); // chave da tabela);

                  //$g1->addTextColumn('matriculas','Curso','CURSO',20,20,'','','','yes'); 

                  // adicionando o objeto ao campo html criado acima

                  $frm->set('html_gride1',$g1); // ou $frm->getField('gride')->add($g);

                  // exibir o formulário

                  $frm->processAction();

                  $frm->show();

                  function tratarCelula($rowNum,$cell,$objColumn,$aData,$edit)

                  {

                  // echo "Nome da coluna : ".$objColumn->getFieldName()."<br>";

                  if( $objColumn->getFieldName()=='NOME')

                  {

                     $cell->setValue(fwSelecionarAba('abaCadastro')); 

                  }

                  }

                  ?>

                  <script>

                  function selecionarCurso($rowNum,$cell,$objColumn,$aData,$edit) 

                  // alert("Nome da coluna : ".$objColumn->getFieldName());

                  jQuery("#codigo").val(codigo); 

                  fwSelecionarAba('abaMatriculas'); 

                  fwDoAction('lerAlunosCurso'); 

                  </script>

                  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
                    30 de Outubro de 2012, 21:17

                     

                    Arildo,

                    segue o código com a simulação de criação de link no gride e mudança de aba com os registros selecionados. Vai dar para você adaptar de acordo com sua necessidade.

                    Uma dica é que ao adicionar uma coluna no gride com addColumn voce deve adicionar todas as outras tambem, porque o gride só cria as colunas automaticamente quando não existir nenhuma coluna adicionada.

                    <?php
                    $frm = new TForm('Cadastro de Alunos',450);
                    // adicionar o campo hidden para a coluna chave da tabela.
                    $frm->addHiddenField('codigo');
                    $frm->addHiddenField('codigo_aluno');
                    // adicionando abas ao formulário
                    $pc = $frm->addPageControl('pc'); // criar instância do controlador de páginas
                    // adicionar a pagina "Cadastro"
                    $pc->addPage('Cadastro',true,true,'abaCadastro'); // a partir daqui, tudo que for
                        //adicionado ao form ficará dentro da aba até encontrar o metodo closeGroup();
                        // adicionar os campos na aba cadastro
                        //$frm->addMaskField('placa','Nº da Placa:',true,'aaa-9999');
                        $frm->addTextField('nome','Nome:',100,true,80);

                        $frm->addTextField('endereco','Endereço:',100,null,80);
                        $frm->addTextField('bairro','Bairro:',50);
                        $frm->addNumberField('cep','CEP:',10);
                        $frm->addTextField('cidade','Cidade:',50);
                        $frm->addSelectField('cod_uf','Estado:',2);
                        //$frm->addTextField('sig_uf','Estado:',2);
                        $frm->addDateField('nascimento','Data Nascimento:',false);
                        $frm->addMemoField('observacao','Observações:',2000,false,60,4);
                        $frm->addButton('Salvar','salvar','btnSalvar',null,null,true,false);
                        $frm->addButton('Limpar','limpar','btnLimpar',null,null,false,false);
                        // para exemplificar o uso do campo html e da inclusão de um arquivo css externo
                        $frm->addHtmlField('mensagem','<br><center><b><span class="FonteVermelha">Campos em vermelho são de preenchimento obrigatório</span></b></center>');
                        // adicionar a aba Listagem
                    $pc->addPage('Listagem',false,true,'abaListagem');
                        $frm->addHtmlField('html_gride_listagem','');

                    //$alunos = alunosDao::selectAll('nome'); // array de dados
                    // inicio simulação consulta ao banco de dados
                    $alunos['CODIGO_ALUNO'][0]     = 1;
                    $alunos['NOME'][0]             = 'Aluno 1';
                    $alunos['CODIGO_ALUNO'][1]     = 2;
                    $alunos['NOME'][1]             = 'Aluno 2';

                    $pc->addPage('Cursos Matriculados',false,true,'abaMatriculas'); // a partir daqui, tudo que for
                        $frm->addHtmlField('html_gride_cursos','');

                        // criarção do gride
                        $g = new TGrid(
                        'gd' // id do gride no html
                        ,'Listagem dos Alunos' // titulo do gride
                        ,$alunos
                        ,null
                        ,null
                        ,'CODIGO_ALUNO'); // chave da tabela);
                        $g->addColumn('nome','Nome',1200);
                        $g->addColumn('cursos','Ver Cursos',200,'center');
                        $g->setOnDrawCell('criarLink');
                        $frm->set('html_gride_listagem',$g); // ou $frm->getField('gride')->add($g);

                        //--------------------------------------------------------------
                        if( $acao == 'lerCursosAluno')
                        {
                            $cursos = null;
                            //$cursos = TPDOConnection::executeSql("select a.codigo, b.descricao as Curso, c.descricao,c.turno from matriculas a, turmas c, cursos b where a.cod_curso = b.codigo and a.cod_turma = c.codigo and a.cod_aluno = ?",$frm->get('codigo_aluno') );

                            // inicio simulação dados dos cursos
                            // registros para demonstração
                            if( $frm->get('codigo_aluno') == 1 )
                            {
                                $cursos['CODIGO'][0]         = 1;
                                $cursos['CODIGO_ALUNO'][0]    = 1;
                                $cursos['CURSO'][0]         = 'CURSO 1 DO ALUNO 1';
                                $cursos['DESCRICAO'][0]     = 'TURMA 1';
                                $cursos['TURNO'][0]         = 'TURNO 1';

                                $cursos['CODIGO'][1]         = 2;
                                $cursos['CODIGO_ALUNO'][1]    = 1;
                                $cursos['CURSO'][1]         = 'CURSO 2 DO ALUNO 1';
                                $cursos['DESCRICAO'][1]     = 'TURMA 2';
                                $cursos['TURNO'][1]         = 'TURNO 2';
                            }
                            else if( $frm->get('codigo_aluno')==2)
                            {
                                $cursos['CODIGO'][2]         = 3;
                                $cursos['CODIGO_ALUNO'][2]    = 2;
                                $cursos['CURSO'][2]         = 'CURSO 1 DO ALUNO 2';
                                $cursos['DESCRICAO'][2]     = 'TURMA 2';
                                $cursos['TURNO'][2]         = 'TURNO 2';
                            }
                            // fim da simulação

                            $g1 = new TGrid(
                            'gd' // id do gride no html
                            ,'Cursos Matriculados' // titulo do gride
                            ,$cursos
                            //,''
                            ,null
                            ,null
                            ,'codigo'); // chave da tabela);
                            $g1->setCreateDefaultDeleteButton(false);
                            $g1->setCreateDefaultEditButton(false);
                            // adicionando o objeto ao campo html criado acima
                            $frm->set('html_gride_cursos',$g1); // ou $frm->getField('gride')->add($g);
                        }
                    // exibir o formulário

                    $frm->processAction();

                    $frm->show();

                    function criarlink($rowNum,$cell,$objColumn,$aData,$edit)
                    {
                        //echo "Nome da coluna : ".$objColumn->getFieldName()."<br>";
                        if( $objColumn->getFieldName()=='cursos')
                        {
                            $link = new TElement('a');
                            $link->setProperty('href','#');
                            $link->addevent('onclick','visualizarCursos('.$aData['CODIGO_ALUNO'].')');
                            $link->add('Clique Aqui');
                            $cell->add($link);
                           //$cell->setValue(fwSelecionarAba('abaCadastro'));
                        }
                    }

                    function tratarCelula($rowNum,$cell,$objColumn,$aData,$edit)
                    {

                    //echo "Nome da coluna : ".$objColumn->getFieldName()."<br>";
                    if( $objColumn->getFieldName()=='NOME')
                    {
                       $cell->setValue(fwSelecionarAba('abaCadastro'));
                    }
                    }

                    ?>
                    <script>
                    function visualizarCursos(codigo_aluno)
                    {
                        jQuery("#codigo_aluno").val(codigo_aluno);
                        fwSelecionarAba('abaMatriculas');
                        fwDoAction('lerCursosAluno');
                    }
                    </script>

                    abraço.

Essa comunidade não possui posts nesse blog