我曾尝试将 cgridview 与 csqldataprovider 一起使用。
- 我的 sql 查询从不同的表中获取数据。我在查询中使用了别名。所以在gridview中,当我点击标题值时,它会使用列名进行排序。即,
column name = Track
它将创建查询,... order by Track
但实际上它应该创建...order by t.trackname
. - 为了增加更多复杂性,我将表中的列名作为表名。例如,在具有表名
Store
和列名trackid
的同一个数据库中,我在同一个数据库中有另一个具有表名的表trackid
。 - 我已经检查了解决方案。在 cgridview 中,当我指定我的列属性时,它不会变得可排序(没有锚标签)。没有列属性,它是可排序的。
在控制器文件中,
$dataProvider=new CSqlDataProvider($query, array(
'totalItemCount'=>$count,
'sort'=>array('defaultOrder'=>'caseid DESC',
'attributes'=>array(
'caseid',
'trackid',
'status',
),
),
));
在视图文件中,
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'ajaxUpdate'=>true,
'columns'=>array(
array('header'=>'Case','name'=>'Case','value'=>'$data[caseid]'),
array('header'=>'Track','name'=>'Track','value'=>'$data[trackid]'),
array('header'=>'Status','name'=>'Status','value'=>'$data[status]'),
),