CGridView的CDataColumn可以设置htmlOptions属性,比如添加css样式:
array(
'name'=>'Title',
'type'=>'raw',
'value'=>'$data->Title',
'htmlOptions'=>array('class'=>'alignLeft'),
),
但是如果想根据$data记录的不同情况,来设置不同的css属性,CDataColumn就不支持了。
解决方法是编写CDataColumn派生类,重写renderDataCell函数,在里面添加对表达式的支持。
public function renderDataCell($row)
{
$data=$this->grid->dataProvider->data[$row];
if($this->evaluateHtmlOptions) {
foreach($this->htmlOptions as $key=>$value) {
$options[$key] = $this->evaluateExpression($value,array('row'=>$row,'data'=>$data));
}
}
else $options=$this->htmlOptions;
if($this->cssClassExpression!==null)
{
$class=$this->evaluateExpression($this->cssClassExpression,array('row'=>$row,'data'=>$data));
if(isset($options['class']))
$options['class'].=' '.$class;
else
$options['class']=$class;
}
echo CHtml::openTag('td',$options);
$this->renderDataCellContent($row,$data);
echo '</td>';
}
然后在CGridView中,使用类似下面的方式进行调用:
array(
'class'=>'Your Derived Class Name',
'header'=>Yii::t('Cms','Title'),
'name'=>'Title',
'value'=>'$data->Title',
'evaluateHtmlOptions'=>true,
'htmlOptions'=>array('style'=>'"{$data->getHtmlOptions()}"'),
),
by iefreer