我不确定我是否会以正确的方式解决这个问题,但现在就去了。
我有一个下拉列表,当我更改此列表的值时,我希望通过Ajax更新CGridView的数据提供者。
DROPDOWNLIST
<?php echo $form->dropDownList(
$model,
'assigned_to',
CHtml::listData(Users::model()->findAll(), 'id', 'username'),
array(
'empty' => 'Please Select',
'ajax' => array(
'type'=>'POST',
'url'=>Yii::app()->createUrl('CrmCalendar/Create', array('id'=>$model->model_id,'modelId'=>$model->model, 'updateGrid'=>1)),
'dataType' => 'json',
'success'=>'function(data)
{
alert(data);
$.fn.yiiGridView.update("user-activites-grid", {
data: data
});
}',
),
)
); ?>
CGridView小工具
<?php $this::widget('zii.widgets.grid.CGridView', array(
'id'=>'user-activites-grid',
'ajaxUpdate' => true,
'dataProvider'=>$model->dpUserActivities(),
));
?>
控制器操作
public function actiongetUserActivitesUpdate($id, $modelId)
{
$model=new CrmCalendar;
$model->model = $modelId;
$model->model_id = $id;
if(isset($_GET['updateGrid']))
{
$model->attributes=$_POST['CrmCalendar'];
$newDp = $model->dpUserActivities();
echo serialize($newDp);
}
}
dpUserActivities
public function dpUserActivities($size=20)
{
$date = DateTime::createFromFormat('d/m/Y H:i:s', $this->StartTime);
$date = $date->format('Y-m-d');
$dataProvider=new CActiveDataProvider($this, array(
'criteria'=>array('condition'=>'assigned_to=:assigned_to AND DATE(StartTime) = :date', 'params'=>array(':assigned_to'=>$this->assigned_to, ':date'=>$date),),
'pagination'=>array('pageSize'=>$size,),
'sort'=>array('defaultOrder'=>'Starttime ASC',),
));
return $dataProvider;
}
我想要实现的是,当指定的下拉列表被更改时,该值将被存储回$ model中,并且dpUserActivites将重新运行新数据,然后更新CGridView。
对不起,如果没有意义的话。
如果您需要更多信息,请与我们联系
问候。