最新消息: 新版网站上线了!!!

Yii CGridView 详细说明

//CGridView详解 
这东西在后台比较有用,能加速开发的速度,值得一看 
 
CGridView用表格的方式显示数据项 
每一行代表一个数据项,一列通常代表数据项的一个属性 
 
CGridView支持排序和分页,可以用ajax或普通的方式 
 
CgridView必序和data provider一起使用 
 
最简单的用法 
 
$dataprovider = new CActiveDataProvider(Post); 
$this->widget(zii.widgets.grid.CGridView’,array(dataProvider’=>$dataprovider, 
)); 
这会用表格的方式显示每一条数据项,每一列是Post的一个属性 
在显示中带了分页和排序 
 
我们可以自定义CgridView::columns属性,以自定义表格列的显示方式 
 
这个cloumns如何配置呢? 
其是一个数组,每一个数组元素对应着一列的配置,可以是字符串或数组 
1、如果是字符串,格式是name:type:header 后两者是可选的,根据这三个值,创建一个CdatColumn实例 
其中type参见CFormatter 
2、如果是数组,其可以实例化CDdataColumnClinkColumn,CButtonColumn,CCheckBoxColumn实例,具体实例化哪个 
由数组中的class指定,默认是CDataColumn 
2.1,如果class=>’CDataCloumn’ 
则可以指定name或者value,如果指定以value优先 
用CDataColumn时如何以关联表的数据序列? 
代码如下:表示可以post关联的author中的username排序列 
$dataprovider = new CActiveDataProvider(Post’,array(criteria’=>array(with’=>’author’, 
), 
‘sort’=>array(attributes’=>array(title’,'create_time’, 
‘author_id’=>array(‘asc’=>’author.username asc’,'desc’=>’author.username desc’,’label’=>’作者’) 
 
) 
), 
)); 
$this->widget(zii.widgets.grid.CGridView’,array(dataProvider’=>$dataprovider, 
‘columns’=>array(title’, 
‘create_time’, 
array(name’=>’author_id’,'value’=>’$data->author->username’), 
), 
)); 
另外CDataColumn还有一个filter属性,如果是空,那么生成一个textfield,如果是数组(键值),则生成一个dropDownlist在当前列的上部,供搜索 
2.2:如果class=>”CLinkColumn” 
array(‘class’=>’CLinkColumn’,'label’=>’查看用户’,'url’=>Yii::app()->createURL(‘user/edit’)) 
则生成一个连接 
2.3:如果class=”CCheckBoxColumn” 
array(‘class’=>’CCheckBoxColumn’,'name’=>’title’,'id’=>’select’), 
可以生成一个checkbox供选择,且只能选一个 
可以配置CGridView::selectableRows 如果是0,则不能选,如果 1,只选一个如果是2或其它值,则可以选多个 
代码如下: 
$this->widget(‘zii.widgets.grid.CGridView’,array( 
‘dataProvider’=>$dataprovider, 
‘selectableRows’=>2, 
‘columns’=>array( 
array(‘class’=>’CCheckBoxColumn’,'name’=>’title’,'id’=>’select’), 
), 
2.3:如果class=”CButtonColumn” 
array( 
‘class’=>’CButtonColumn’, 
‘updateButtonUrl’=>’Yii::app()->createUrl(“post/edit”,array(“id”=>$data->id));’, 
), 
修改updateButtonUrl为编辑贴子 
 
如何用gridview生成一个代搜索的管理列表 
1、在Model的rules 设定可以搜索的属性 
array(‘title, status, create_time’, ‘safe’, ‘on’=>’search’), 
2、在Model中,添加搜索时的方法 
public function search() 
{ 
$criteria=new CDbCriteria; 
 
$criteria->compare(‘title’,$this->title,true); 
 
$criteria->compare(‘status’,$this->status); 
 
$criteria->compare(‘create_time’,$this->create_time); 
 
return new CActiveDataProvider(‘Post’, array( 
‘criteria’=>$criteria, 
‘sort’=>array( 
‘defaultOrder’=>’status, update_time DESC’, 
), 
)); 
} 
3、 在Controler中,写接受搜索用到的表单的值的方法 
public function actionAdmin() 
{ 
$model=new Post(‘search’); 
 
if(isset($_GET['Post'])) 
$model->attributes=$_GET['Post']; 
$this->render(‘admin’,array( 
‘model’=>$model, 
)); 
} 
4、在view中用CGridView显示 
设置好 
<?php $this->widget(‘zii.widgets.grid.CGridView’, array( 
‘dataProvider’=>$model->search(), 
‘filter’=>$model, 
‘columns’=>array( 
 
), 
)); ?> 
 
以上代码大部分是yii自动生成的,只要做少量修改即可 
有时候会出现,搜索后页面为空的清况,原因可能是 
layout/main.php中 
echo $content外层无div,就是说main.php中必须有一个div包含$content

转载请注明:谷谷点程序 » Yii CGridView 详细说明