将活动记录数据插入Yii的CGRidView小部件

时间:2011-04-26 19:19:51

标签: php mysql yii yii-components zii-widgets

我在mysql中有一个表,我希望用CGridView小部件显示。这是我到目前为止的代码:

我的控制器文件(当然剪断):

public function actionIndex()
{
  //call the AR table model
  $model = new ViewResults();
  //This generates a simple "SELECT * FROM table statment".
  $list = $model->findAll();
  $this->render('index', array('list'=>$list));
}

我的查看文件看起来像(剪掉):

<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$list,
 )); ?>

我收到以下错误:

在第105行的C:\ xampp \ framework \ zii \ widgets \ CBaseListView.php中的非对象上调用成员函数getData()

以下是CBaseListView.php文件的源代码。

我很确定通过将列表对象放在窗口小部件中而搞砸了。在我将它传递给小部件之前,我是否需要对$list做些什么?

3 个答案:

答案 0 :(得分:3)

findAll()返回数组,而CActiveDataProvider返回dataProvider。

如果你想使用find all,你所要做的就是使用CArrayDataProvider转换数组

示例:

<?
php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>new CArrayDataProvider($list, array()),
 )); 
?>

答案 1 :(得分:2)

您可以使用CActiveDataProvider Yii的类。 像这样:

$dataProvider = new CActiveDataProvider('model', array(
  'criteria'=>array(
    'order'=>'column1',
  ),
));

$this->widget('zii.widgets.grid.CGridView', array(
  'id'=>'my-grid',
  'dataProvider'=>$dataProvider,
  'columns'=>array(
    'column1',
    'column2',
    'column3',
    array(
      'class'=>'CButtonColumn',
    ),
  ),
));

模型是您的模型并列出您的列。

答案 2 :(得分:0)

使用CArrayDataProvider也是一种选择。但是当它来自CActiveDataProvider时,排序很容易。