2

我在 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在将其传递给小部件之前,我需要做些什么吗?

4

3 回答 3

3

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

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

例子:

<?
php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>new CArrayDataProvider($list, array()),
 )); 
?>
于 2011-04-27T17:30:54.990 回答
2

你可以使用CActiveDataProvider Yii 的Class。像这样的东西:

$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',
    ),
  ),
));

其中模型是您的模型,列是您的列。

于 2011-04-26T19:53:23.427 回答
0

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

于 2011-04-27T18:01:54.360 回答