You are viewing revision #3 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version or see the changes made in this revision.
I recently had to have a checkbox column in my grid view that supported the 'disabled' attribute. This was easy enough to do by extending the CCheckBoxColumn. Hwoever, I also wanted the checkbox to be selected when clicking on the table's row (supported via CGridView's selectableRows option). I discovered I had to tweak yiigridview.js so that it would not select disabled rows when clicking on it or clicking on the 'select all' checkbox.
ECheckBoxColumn.php ¶
Save this file to protected/extensions/. This was taken directly from http://www.yiiframework.com/forum/index.php/topic/20495-disable-checkbox-in-ccheckboxcolumn-based-on-attribute-value/
<?php
class ECheckBoxColumn extends CCheckBoxColumn
{
public $disabled;
protected function renderDataCellContent($row,$data)
{
if($this->disabled!==null)
$this->checkBoxHtmlOptions['disabled']=$this->evaluateExpression($this->disabled,array('data'=>$data,'row'=>$row));
parent::renderDataCellContent($row,$data);
}
?>
jquery.yiigridview.js ¶
Cop this file and related files (css, img, etc) to /protected/assets/gridview/ or where ever you want it (if different, be sure to change it in the usage scenerio). I'm just going to link the whol efile here: http://pastebin.com/b5t9NdmZ
Usage ¶
$this->widget('bootstrap.widgets.TbGridView', array(
'baseScriptUrl' => Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('app.assets')).'/gridview',
'dataProvider'=>$dataProvider,
'selectableRows'=>2,
'rowCssClassExpression' => '(expresion) ? null : "disabled"',
'columns'=>array(
array(
'class'=>'ext.ECheckBoxColumn',
'disabled'=>'(true/false exression (same as rowCssClassExpression)',
),
),
));
Your code here...
Limitations ¶
'disabled' class is hard coded into the modified JS code. For me to add a custom 'disabled' class, I would have to extend CGridView, and to me it just wasn't worth adding a small property for it to be passed into yiigridview.js.
Added in main trunk some time ago
I commited a pull request some time ago with this feature, and it will be available in next release :)
great!
wonderful! Does your commit also change the gridview javascript file to support it when selecting rows? they go hand in hand
of course
You can check here that only the enabled chekboxes are selected.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.