Yii Framework Forum: Dual Grid - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Dual Grid Transferir registro entre grids Rate Topic: -----

#1 User is offline   tatau 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 13-September 13

Posted 25 September 2013 - 08:03 AM

Olá Pessoal,


Tenho duas grids. E quero "transferir" registro entre ela sem realizar consulta. Alguma ideia de como posso pesquisar isso com Jquery?

Segue meu código:

$rawData=Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id_cidade=" . $idCidade ." AND pessoa.id 
    NOT IN (SELECT participante_reuniao.id_pessoa 
    FROM participante_reuniao)")->queryAll();                    
$dataProvider=new CArrayDataProvider($rawData);                    
$this->widget('ext.selgridview.SelGridView', array(
     'id' => 'pessoa-out-reuniao-grid',
     'dataProvider' => $dataProvider,
     //'dataProvider' => $pessoa->search(),
     //'filter'=>$pessoa,
     'selectableRows' => 2,                         
     'columns' => array(	
         array(
             'class'=>'CCheckBoxColumn',
         ),
         'nome',
         'rg',
         'cpf',                             
         'telefone',                                
     ),
));
?>
<?php 
    $this->widget('bootstrap.widgets.TbButton', array(
    'type'=>'secondary',
    'label'=>'Adicionar',
    'url'=>'#',
    'htmlOptions'=>array('id'=>'btnAdicionarReuniao'),
));



$rawData=Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id_cidade=" . $idCidade ." AND pessoa.id
    IN (SELECT participante_reuniao.id_pessoa 
    FROM participante_reuniao)")->queryAll();                  
$dataProvider=new CArrayDataProvider($rawData);                    
$this->widget('ext.selgridview.SelGridView', array(
     'id' => 'pessoa-in-reuniao-grid',
     'dataProvider' => $dataProvider,
     //'dataProvider' => $pessoa->search(),
     //'filter'=>$pessoa,
     'selectableRows' => 2,                         
     'columns' => array(	
         array(
             'class'=>'CCheckBoxColumn',
         ),
         'nome',
         'rg',
         'cpf',                             
         'telefone',                                
     ),
));
?>
<?php 
    $this->widget('bootstrap.widgets.TbButton', array(
    'type'=>'secondary',
    'label'=>'Remover',
    'url'=>'#',
    'htmlOptions'=>array('id'=>'btnRemoverReuniao'),
)); ?>


O código está em uma página a parte. É renderizado pelo _form. Ao salvar o form pego os registro do 2° grid para inserir no banco.
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 824
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 26 September 2013 - 09:59 PM

tatau,

Como deseja fazer essa transferência de uma grid para outra? Terá algum botão?

So adiantando a solução, seria bom você fazer isso em javascript, usando ajax.

Quando você clicar no botão da Grid-1, em ajax você faz essa alteração para a tabela que o Grid-2 faz a leitura. Depois disso, você faz a atualização das duas grid usando jQuery('#grid-1').yiiGridView('update') e jQuery('#grid-2').yiiGridView('update').
Newerton Vargas de Araújo
0

#3 User is offline   tatau 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 13-September 13

Posted 27 September 2013 - 07:25 AM

Olá Newerton,

Obrigado pela dica. Tentei achar uma solução em JavaScript, porém sem sucesso.
Resolvi da seguinte forma:

Coloquei uma div na minha view, que lista os dois grids. Conforme atualização do dropDownList. O Primeiro Grid de participantes disponíveis para reunião. E o segundo grid dos participantes que já estão na reunião. Cada grid está em uma página, renderizo eles na div da view.


echo $form->dropDownList($model, 'id_cidade', GxHtml::listDataEx(Cidade::model()->findAllAttributes(null, true)),
                        array(
                                'ajax' => array(
                                'type'=>'POST',
                                'url'=>$this->createUrl('reuniao/UpdateAjax'), //url to call
                                'update'=>'#outlet',
                                'data'=>'js:jQuery(this).serialize()',                                
                            )
                        )
                    );

<div id="outlet"></div>



Código do Primeiro Grid:

<?php
Yii::app()->clientScript->registerScript('update-grid-pessoa-out-reuniao', "
$('#btnAdicionarReuniao').click(function(){
    var arrayIds = $('#pessoa-out-reuniao-grid').selGridView('getAllSelection');
    var getIdCidade = $('#idCidade').val();
    
    if (!arrayIds.length)
    {
        alert('Selecione no mínimo um ítem para ser adicionado');
        return false;
    }
    
    $.ajax({
        type: 'POST',
        url: ''+location.pathname+'?r=reuniao/UpdateAjax&arrayIdAdicao='+arrayIds+'&idCidade='+getIdCidade+'',
        data: {selectedItems : arrayIds},
        success: (function (data){           
           $('#outlet').html(data);
        }),
        error: function(data) { // if error occured
            alert('Error occured.please try again');   
            alert(data);
        },
        dataType:'html'
    });
    
    return false;    

});
");
?>

<h2>Participantes Disponíveis</h2>
<?php
$this->widget('ext.selgridview.SelGridView', array(
     'id' => 'pessoa-out-reuniao-grid',
     'dataProvider' => $dataProvider,
     //'dataProvider' => $pessoa->search(),
     //'filter'=>$pessoa,
     'selectableRows' => 2,                         
     'columns' => array(	
         array(
             'class'=>'CCheckBoxColumn',
         ),
         'nome',
         'rg',
         'cpf',                             
         'telefone',                                
     ),
));
?>
<INPUT TYPE="hidden" NAME="idCidade" ID="idCidade" VALUE="<?php echo $idCidade; ?>">
<?php 
$this->widget('bootstrap.widgets.TbButton', array(
    'type'=>'secondary',
    'label'=>'Adicionar',
    'url'=>'#',
    'htmlOptions'=>array('id'=>'btnAdicionarReuniao'),
)); 
?>


Código do segundo Grid:

<?php
Yii::app()->clientScript->registerScript('update-grid-pessoa-in-reuniao', "
$('#btnRemoverReuniao').click(function(){
    var arrayIds = $('#pessoa-in-reuniao-grid').selGridView('getAllSelection');
    var getIdCidade = $('#idCidade').val();
    
    if (!arrayIds.length)
    {
        alert('Selecione no mínimo um ítem para ser removido');
        return false;
    }
    
    $.ajax({
        type: 'POST',
        url: ''+location.pathname+'?r=reuniao/UpdateAjax&arrayIdRemocao='+arrayIds+'&idCidade='+getIdCidade+'',
        data: {selectedItems : arrayIds},
        success: (function (data){           
           $('#outlet').html(data);
        }),
        error: function(data) { // if error occured
            alert('Error occured.please try again');   
            alert(data);
        },
        dataType:'html'
    });
    
    return false;    

});
");
?>


<h2>Participantes da Reunião</h2>
<?php
$this->widget('ext.selgridview.SelGridView', array(
     'id' => 'pessoa-in-reuniao-grid',
     'dataProvider' => $dataProvider,
     //'dataProvider' => $pessoa->search(),
     //'filter'=>$pessoa,
     'selectableRows' => 2,                         
     'columns' => array(	
         array(
             'class'=>'CCheckBoxColumn',
         ),
         'nome',
         'rg',
         'cpf',                             
         'telefone',                                
     ),
));
?>
<INPUT TYPE="hidden" NAME="idCidade" ID="idCidade" VALUE="<?php echo $idCidade; ?>">
<?php 
$this->widget('bootstrap.widgets.TbButton', array(
    'type'=>'secondary',
    'label'=>'Remover',
    'url'=>'#',
    'htmlOptions'=>array('id'=>'btnRemoverReuniao'),
)); 
?>


No meu controller faço toda a lógica para pegar os checkbox selecionados nos grids para adição e remoção dos participantes:

public function actionUpdateAjax($arrayIdAdicao = null, $arrayIdRemocao = null)
        {
            
            if(!is_null($arrayIdAdicao)){
                $arrayIdAdicao = explode(",", $arrayIdAdicao);
            }
            
            if(!is_null($arrayIdRemocao)){
                $arrayIdRemocao = explode(",", $arrayIdRemocao);
            }
            
            
            if (isset($_POST['Reuniao']['id_cidade'])){
                $idCidade = $_POST['Reuniao']['id_cidade'];
            } else {
                $idCidade = $_GET['idCidade'];
            }

            
            if (isset($idCidade) || !is_null($arrayIdRemocao) || !is_null($arrayIdAdicao)) {
                
                
             
                //Participantes fora da reunião
                $rawDataOutReuniao=Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id_cidade=" . $idCidade ." AND pessoa.id 
                    NOT IN (SELECT participante_reuniao.id_pessoa 
                    FROM participante_reuniao)")->queryAll();                    
                $dataProviderOutReuniao=new CArrayDataProvider($rawDataOutReuniao);   
                
                
                //Participantes dentro da reunião
                $rawDataInReuniao=Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id_cidade=" . $idCidade ." AND pessoa.id
                    IN (SELECT participante_reuniao.id_pessoa 
                    FROM participante_reuniao)")->queryAll();                  
                $dataProviderInReuniao=new CArrayDataProvider($rawDataInReuniao);
                
                if(!is_null($arrayIdAdicao)){
                    
                    //Remover participante dos participantes disponíveis
                    foreach ($dataProviderOutReuniao->rawData as $key => $value){                        
                        if(in_array($dataProviderOutReuniao->rawData[$key]['id'], $arrayIdAdicao)){
                            unset($dataProviderOutReuniao->rawData[$key]); 
                        }                        
                    }
                    
                    // adiciona Participante a Reuniao
                    $modelPessoa = new Pessoa;
                    foreach ($arrayIdAdicao as $key => $value) { 
                        $rawDataPessoa = Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id=" . $value ."")->queryAll();
                        $modelPessoa = new CArrayDataProvider($rawDataPessoa);
                        //verifica se participante já inserido na reunião                        
                        if((is_null($dataProviderInReuniao->rawData[$key]['id'])) || (!in_array($dataProviderInReuniao->rawData[$key]['id'], $modelPessoa->rawData[0]))){
                            array_push($dataProviderInReuniao->rawData, $modelPessoa->rawData[0]);
                        }
                    }                   
                }
                
                if(!is_null($arrayIdRemocao)){
                    
                    //Remover participantes que estão dentro da reuniao
                    foreach ($dataProviderInReuniao->rawData as $key => $value){
                        if(in_array($dataProviderInReuniao->rawData[$key]['id'], $arrayIdRemocao)){
                            unset($dataProviderInReuniao->rawData[$key]); 
                        }        
                    }
                    
                    // adiciona Participante removidos da reuniao aos participantes disponiveis
                    $modelPessoa = new Pessoa;
                    foreach ($arrayIdRemocao as $key => $value) { 
                        $rawDataPessoa = Yii::app()->db->createCommand("SELECT * FROM pessoa WHERE id=" . $value ."")->queryAll();
                        $modelPessoa = new CArrayDataProvider($rawDataPessoa);
                        //verifica se participante já esta fora da reuniao
                        if((is_null($dataProviderOutReuniao->rawData[$key]['id'])) || (!in_array($dataProviderOutReuniao->rawData[$key]['id'], $modelPessoa->rawData[0]))){
                            array_push($dataProviderOutReuniao->rawData, $modelPessoa->rawData[0]);
                        }
                    }   
                }                
                $this->renderPartial('_participantesOutReuniao', array('dataProvider' => $dataProviderOutReuniao, 'idCidade' => $idCidade), false, true);
                $this->renderPartial('_participantesInReuniao', array('dataProvider' => $dataProviderInReuniao, 'idCidade' => $idCidade), false, true);  
            }
            
           
        }

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users