Yii,基于AJAX结果更新CGridView数据提供者

时间:2014-07-29 14:08:17

标签: php ajax yii

我不确定我是否会以正确的方式解决这个问题,但现在就去了。

我有一个下拉列表,当我更改此列表的值时,我希望通过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。

对不起,如果没有意义的话。

如果您需要更多信息,请与我们联系

问候。

0 个答案:

没有答案