我使用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',
),
我在这里使用bootstrap gridview但是如果我切换到常规的CGridView - 问题是一样的。
答案 0 :(得分:3)
嗯,与CActiveDataProvider
不同,CSqlDataProvider
没有支持默认CButtonColumn
按钮的所有必需信息。
CActiveDataProvider
将提供对象,但CSqlDataProvider
将提供数组,CButtonColumn
将与对象一起使用,这就是为什么你得到“试图获取非对象的属性“错误信息......
您应该定义按钮网址,例如:
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"]))',
),