【问题标题】:Button column on CGridView with CSqlDataProvider as provider?以 CSqlDataProvider 作为提供者的 CGridView 上的按钮列?
【发布时间】:2013-04-17 12:14:24
【问题描述】:

我正在使用 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 - 问题是一样的。

【问题讨论】:

  • 向我们展示您的 gridview 列代码

标签: gridview yii dataprovider cbuttoncolumn


【解决方案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"]))',
),

【讨论】:

  • 不幸的是,这还不够。在执行extract($data) 之后,它仍然调用$data-&gt;primaryKey
  • extract($data) ??你在哪里看到这个?请用您当前的代码更新您的问题。
  • 我的错。你的解决方案没问题。我在网址中犯了一个错误。顺便说一句 - extract($data) 在 CComponent.php 中(在 yii 框架中)。提取数据后,eval 函数导致了问题。你的解决方案完全没问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 2013-10-07
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多