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]
<?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
~~~
[php]
$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(
'checked' => '('.$char[0]->activeAPIMask.' &
'.$availableMask.' & $data->mask)',
'value'=>'$data->mask',
'class'=>'ext.ECheckBoxColumn',
'disabled'=>'(true/false exression (same as
rowCssClassExpression)',
),
),
));
~~~
~~~
[php]
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.