Столбец кнопки на CGridView с CSqlDataProvider в качестве поставщика?

Я использую CSqlDataProvider для предоставления данных для CGridView. Все работает нормально, пока я не хочу добавить столбец CButtonColumn. Это приводит к ошибке:

Trying to get property of non-object 

и в стеке

echo $this->displayExtendedSummary && !empty($this->extendedSummary['columns']) 
        ? $this->parseColumnValue($column, $row) : $column->renderDataCell($row);

в файле:

    c:\...\yii\framework\zii\widgets\grid\CButtonColumn.php(316)

Есть идеи, как с этим бороться?

РЕДАКТИРОВАТЬ: Поставщик:

$provider = new CSqlDataProvider($query, array(
        'totalItemCount' => $countRes,
        'db' => $this->db,
        'keyField' => 'idCall',
        'params' => $params,
        'pagination' => array(
            'pageSize' => 25,
        ),
        'sort' => array(
            'attributes' => array(
                'idCall, idTime',
            ),
        ),
    ));

Ввиду:

<?php $this->widget('bootstrap.widgets.TbExtendedGridView', array(
'id'=>'call-history-grid',
'type' => 'striped condensed',
'template' => '{pager}{items}{summary}',
'htmlOptions' => array('style' => 'font-size: 0.75em'),
'dataProvider'=>$model->getInviteCallList(),
'columns'=>array(
    array(
        'header' => '#',
        'value' => '$data["idCall"]',
        'visible' => 'Yii::app()->user->superuser',
    ),
    array(
        'header' => 'Data',
        'value' => '$data["callDateTime"]',
    ),
                    array(
        'class'=>'zii.widgets.grid.CButtonColumn',
    ),

Я использую здесь gridtrap gridview, но если я переключаюсь на обычный CGridView - проблема та же.

1 ответ

Решение

Ну в отличии от CActiveDataProvider, CSqlDataProvider не имеет всей необходимой информации для поддержки по умолчанию CButtonColumn кнопок.

CActiveDataProvider предоставит объект, но CSqlDataProvider обеспечит массив, и CButtonColumn работает с объектами, поэтому появляется сообщение об ошибке "Попытка получить свойство необъекта"...

Вы должны определить кнопки URL, например:

array(
  'class'=>'zii.widgets.grid.CButtonColumn',
  'viewButtonUrl'=>'Yii::app()->createUrl("/mycontroller/view", array("id"=>$data["idCall"]))',
  'updateButtonUrl'=>'Yii::app()->createUrl("/mycontroller/update", array("id"=>$data["idCall"]))',
  'deleteButtonUrl'=>'Yii::app()->createUrl("/mycontroller/delete", array("id"=>$data["idCall"]))',
),
Другие вопросы по тегам