Yii: 如何在CGridView组件中根据不同的记录行数据显示不同的操作
2013-01-06 21:27
645 查看
使用CGridView来显示表格数据,一个简单的需求如下:
表格中显示文章,每行的操作列需要根据文章的状态而变化,
比如已审核的文章不需要出现审核的操作,而处于新建状态的文章可以有批准和拒绝的动作。
缺省情况下CGridView是无法实现以上需求的,其CButtonColumn中的template虽然可以定制,但对每一行数据都一样。
解决方法:
从CButtonColumn派生一个类FButtonColumn,override其init和renderDataCellContent方法:
然后更改视图中的template参数如下:
'template'=>'$data->getTemplate()',
iefreer
表格中显示文章,每行的操作列需要根据文章的状态而变化,
比如已审核的文章不需要出现审核的操作,而处于新建状态的文章可以有批准和拒绝的动作。
缺省情况下CGridView是无法实现以上需求的,其CButtonColumn中的template虽然可以定制,但对每一行数据都一样。
'columns'=>array( ... array( 'class'=>'FButtonColumn', 'header'=>'Actions', 'template'=>'{view} {approve} {reject}', 'buttons'=>array( 'view'=>array( 'label'=>'View', 'url'=>'Yii::app()->controller->createUrl("view", array("Id"=>$data->primaryKey))', ), 'approve'=>array( 'label'=>'Approve', 'url'=>'Yii::app()->controller->createUrl("approve", array("Id"=>$data->primaryKey))', ), 'reject'=>array( 'label'=>'Reject', 'url'=>'Yii::app()->controller->createUrl("reject", array("Id"=>$data->primaryKey))', ), ), 'htmlOptions'=>array('class'=>'alignLeft'), ) ... )
解决方法:
从CButtonColumn派生一个类FButtonColumn,override其init和renderDataCellContent方法:
public function init() { $this->initDefaultButtons(); foreach($this->buttons as $id=>$button) { if(strpos($this->template,'{'.$id.'}')===false && $this->template != '$data->getTemplate()') unset($this->buttons[$id]); ... } ... } protected function renderDataCellContent($row,$data) { $tr=array(); ob_start(); foreach($this->buttons as $id=>$button) { $this->renderButton($id,$button,$row,$data); $tr['{'.$id.'}']=ob_get_contents(); ob_clean(); } ob_end_clean(); if($this->template === '$data->getTemplate()') { $template = $this->evaluateExpression($this->template,array('row'=>$row,'data'=>$data)); } echo strtr($template,$tr); }
然后更改视图中的template参数如下:
'template'=>'$data->getTemplate()',
iefreer
相关文章推荐
- bootstrap-table.js如何根据单元格数据不同显示不同的字体的颜色
- bootstrap-table.js如何根据单元格数据不同显示不同的字体的颜色
- 根据select选项,显示不同的表单,进而提交显示的数据
- 如何记住ExtJs grid 列表的 隐藏和显示列,针对客户的操作习惯,客户所查看的列表信息也不同
- 如何根据判断数据的结果,改变DataGridView中对应记录的背景颜色?
- 根据记录分组、将数据动态纵向显示
- 嵌套子表(dx),如何根据从表合计数显示主表记录的颜色
- dataTable 根据不同行数据动态显示行操作
- MySql如何分级查询上千万行记录的表,并将该大数据显示到界面中
- 关于EasyUI 1.5版Datagrid组件在空数据时无法显示"空记录"提示的BUG解决方法
- 如何根据不同运营商情况或者数据状态默认不同的主页
- combox如何根据下拉框执行不同的操作
- Yii如何让admin里的组件中的数据成为可以单击的连接
- 使用ASP.NET页面创建可视的UI,在客户机上实例化MSXML分析器的页面从中间层组件取出XML数据、操作并显示 并有问题请高手解决
- DataGridView中的行如何根据不同的值显示不同的行背景色
- laravel中根据 用户权限 所显示用户对每条数据 相对应的操作按钮
- Yii:如何在CGridView列表控件使用了Ajax方式更新数据的情况下返回前一个页面
- 不同的数据源,不同的数据操作流程——记录下最近的项目心得
- 如何判断mysql中数据表中两个列之间的相同记录和不同记录
- ASP编程入门进阶(二十):ADO组件之显示数据记录