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);
}
}