Выброс фильтра CGridView из массива

У меня есть таблица поставщиков (id, title, onoff), где onoff-столбец является статусом: 1 = on, 0 = off Я не имею таблицу в БД для этих статусов, поэтому у меня нет модели для статусов.

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'provider-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'name'=>'id',
            'htmlOptions'=>array('width'=>'40px'),
        ),
        'title',
        array(
            'name'=>'onoff',
            'filter'=>CHtml::dropDownList('Provider[onoff]', '',  
                array(
                    ''=>'All',
                    '1'=>'On',
                    '0'=>'Off',
                )
            ),
        ),
        array(
            'class'=>'CButtonColumn',
            'template'=>'{update}{delete}'
        ),
    ),

Он фильтрует данные, но после ajax забудьте о состоянии выпадающего меню Каков наилучший способ создания выпадающего списка в этом случае?

И какой лучший способ заменить 1 на On и 0 на Off в ячейках datagrid?

Ответ 1

array( 'name' => 'language',
 'value' => '$data->language',
 'filter' => CHtml::listData( Vediodesc::model()->findall(), 'language', 'language'),
 ),

Ответ 2

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'provider-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    array(
        'name'=>'id',
        'htmlOptions'=>array('width'=>'40px'),
    ),
    'title',
    array(
        'name'=>'onoff',
        'value'=>'Crud::getOnoff($data->onoff)',
        'filter'=>CHtml::listData(Crud::getOnoffs(), 'id', 'title'),,
    ),
    array(
        'class'=>'CButtonColumn',
        'template'=>'{update}{delete}'
    ),
),

В модели

public function getOnoffs()
{
return array(
    array('id'=>'1', 'title'=>'On'),
    array('id'=>'0', 'title'=>'Off'),
);
}
public function getOnoff($onoff)
{
if($onoff == 1) 
    return 'On';
else 
    return 'Off';
}