Как сделать сортировку столбца CGridView с помощью CSqldataprovider?

Как сделать сортировку столбцов CGridView (при нажатии на заголовок столбца) с помощью CSqldataprovider.

В контроллере

    $sql = "select id ,name, address
from User
where city = 'ABC' ";
$rawData = Yii::app()->db->createCommand($sql);
return $allMovies = new CSqlDataProvider($rawData, array(
'keyField' => 'id',
'sort'=>array(
'attributes'=>array(
'id', 'name', 'address',
),
),
'pagination' => array(
'pageSize' => 10,
),
));

Ввиду

 $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'all_movies',
'dataProvider' => $allMoviesStats,
'columns' => array(
'id',
'name',
'address',
'city'
)
)
);?>

Это дает ошибку

 "error":{"code":99,"text":"Property \"CGridView.sort\" is not defined.

0

Решение

Вам необходимо создать объект для класса CDbCriteria и Sort и попытаться использовать его, как показано ниже, и изменить код в соответствии с вашими требованиями.

public function search()
{
$criteria=new CDbCriteria;
$criteria->condition="active=1";
if($this->name=="Enter Country Name" || $this->name=='') {
$this->name='';
} else {
$this->name=$this->name;
}
$criteria->compare('name',$this->name,true);
$sort = new CSort;
$sort->defaultOrder = 'id DESC';
$sort->attributes = array(
'name' => array(
'asc'   =>'name',
'desc'  =>'name DESC',
),
...
... // attributes to sort
);
return new CActiveDataProvider('Country', array( //Country is nothing but you model class name
'criteria'  =>$criteria,
'sort'       => $sort,
'pagination'=>array('pageSize'=> 10),
));
}
2

Другие решения

Других решений пока нет …