CGridView


CGridView 很方便的管理列表,通过CButtonColumn可直接调入删改查按钮

'dataProvider'是数据集合

'filter'是用户的过滤数据(可以理解是searchForm的submit数据)

'columns'是关键,数组里可以直接是字符串或数组。

当一列被指定为一个字符串, 他的格式应该设置为 "name:type:header", "type" 和 "header" 为可选. 在这种情况下将创建一个CDataColumn 实例, 其 CDataColumn::name, CDataColumn::type and CDataColumn::header 属性将被初始化.

当一列被指定为一个数组, 它将被用来创建一个表格列实例, 其中的“类”元素指定列的类名 (如果没有定义,默认为 CDataColumn). 目前, 有这些正是列类: CDataColumn, CLinkColumn, CButtonColumn 和 CCheckBoxColumn.

name就是数据项名称,进行排序和搜索时要用到;

type的有效值包括CGridView的可辨认:格式化,如:原料,文字,NTEXT,HTML,日期,时间,日期,布尔,号码,电子邮件,图像,URL。如需详细资讯,请参考CFormatter。默认为“文本”,这意味着该属性值将HTML编码。

header是列表上显示的项名称;

value是值,字符串会解析成代码段直接执行(重点所以要加长!!!!!!!!!!!!!!!!!!!!)

filter定义检索,如果不定义,默认是文本框。如果false,为不显示检索。如果是数组,即显示为下拉选框。用法可参考上例。

下面是示例:

zii.widgets.grid.CGridView参考手册

Yii CGridView 中实现批量删除实例详解
Yii: 如何在CGridView组件中根据不同的记录行数据显示不同的操作
Yii CGridView 使用详解
Yii把CGridView文本框换成下拉框的方法
YII框架 CGridview显示字段上面加连接LINK
Yii继承CGridView自定义gridview视图详解
Yii CGridView列表用法详解
Yii框架中CGridView使用教程
yii中如何使用CGridView根据字段值来显示不同的自定义按钮或者文字?
Yii中CGridView关联表字段的filter的使用
Yii自定义 CGridView 中的操作按钮详解

====================简单使用===================

  1. <?php $this->widget('zii.widgets.grid.CGridView', array(
  2. 'id'=>'users-grid',
  3. 'dataProvider'=>$model->search(),
  4. 'filter'=>$model,
  5. 'columns'=>array(
  6. 'uid',
  7. 'user',
  8. //'pass',
  9. 'email',
  10. array(
  11. 'name'=>'created',
  12. 'value'=>'date("Y-m-d H:i:s", $data->created)',
  13. ),
  14. array(
  15. 'class'=>'CButtonColumn',
  16. ),
  17. ),
  18. )); ?>

=============输出html============

  1. array(
  2. 'name'=>'name',
  3. 'type'=>'html',
  4. 'value'=>'CHtml::link("$data->name","/?r=menu/itemlists/name/$data->name")',
  5. ),

============隐藏过滤字段======================

  1. array(
  2. 'name'=>'picture',
  3. 'type'=>'html',
  4. //隐藏picture过滤字段
  5. 'filter'=>false,
  6. 'value'=>'(!empty($data->image))?CHtml::image(Yii::app()->baseUrl.$data->picture,"",array("style"=>"width:100px;height:125px;")):CHtml::image(Yii::app()->baseUrl."/images/01.jpg","",array("style"=>"width:100px;height:125px;"))',
  7. ),

============select选择====================

  1. array(
  2. 'name'=>'sex',
  3. 'filter'=>CHtml::dropDownList('Users[sex]', $model->sex, array(''=>'请选择','0'=>'女','1'=>'男')),
  4. 'value'=> '$data->sex > 0 ? "男":"女"',
  5. ),

============头部名更改===================

  1. array(
  2. 'name'=>'sex',
  3. //头部名
  4. 'header'=>'Description',
  5. 'filter'=>CHtml::dropDownList('Users[sex]', $model->sex, array(''=>'请选择','0'=>'女','1'=>'男')),
  6. 'value'=> '$data->sex > 0 ? "男":"女"',
  7. ),

===============pager使用[分页文字更改]=================

想显示 首页和尾页,去掉样式就可以了

  1. 'summaryText'=&
  2. gt;'共<span 
  3. style="color:red;">{count}</span>条&nbsp;&nbsp;当前:<
  4. span style="color:red;">{page}</span>-<span 
  5. style="color:red;">{end}</span>条',
  6. 'pager'=>array(
  7. 'header'         => '',
  8. 'firstPageLabel' => '首页',
  9. 'prevPageLabel'  => '上一页',
  10. 'nextPageLabel'  => '下一页',
  11. 'lastPageLabel'  => '尾页',
  12. ),
  13. 'template'=>'{items}{summary}{pager}',

===========新窗口打开链接===========

  1. 'columns'=>array(
  2. 'id',
  3. 'title',
  4. array(
  5. 'name'=>'url',
  6. 'type'=>'raw',
  7. 'value'=>'CHtml::link($data->url,$data->url,array("target"=>"_blank","class"=>"aa"))',
  8. ),

=================CGridView 中实现批量删除========

CGridView中的columns添加

  1. array(  
  2.     'selectableRows' => 2,  
  3.     'footer' => '<button type="button" onclick="GetCheckbox();" style="width:76px">批量删除</button>',  
  4.     'class' => 'CCheckBoxColumn',  
  5.     'headerHtmlOptions' => array('width'=>'33px'),  
  6.     'checkBoxHtmlOptions' => array('name' => 'selectdel[]'),  
  7. ),  
  8. +++++++2.js代码
  9. <script type="text/javascript">
  10. function GetCheckbox(){
  11.         var data=new Array();
  12.         $("input:checkbox[name='selectdel[]']").each(function (){
  13.                 if($(this).attr("checked")=="checked"){
  14.                         data.push($(this).val());
  15.                 }
  16.         });
  17.         if(data.length > 0){
  18.                 $.post("index.php?r=Users/delall",{'selectdel[]':data}, function (data) {
  19.                         if (data=='ok') {
  20.                                 alert('删除成功!');
  21.      //window.open('index.php?r=Users/admin','indexFrame');
  22.                       }else{
  23. alert("删除失败");
  24.                          }
  25.                 });
  26.         }else{
  27.                 alert("请选择要删除的选项!");
  28.         }
  29. }
  30. </script>

动作action

  1. /*
  2.  * 作用:批量删除
  3.  */
  4.   public function actionDelall()
  5.  {
  6.    if (Yii::app()->request->isPostRequest)
  7.    {
  8.      $criteria= new CDbCriteria;
  9.      $criteria->addInCondition('uid', $_POST['selectdel']);
  10.      Users::model()->deleteAll($criteria);//Words换成你的模型  
  11.      if(isset(Yii::app()->request->isAjaxRequest)) {
  12.        echo 'ok';
  13.      } else
  14.        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
  15.    }
  16.    else
  17.      throw new CHttpException(400,'Invalid request. Please do not repeat this request again. no');
  18.  }