Php 使用数组作为CGridView的数据源

Php 使用数组作为CGridView的数据源,php,yii,Php,Yii,我希望这能奏效。。Im正在编写和开票应用程序,并希望将当前发票保存在一个数组中,该数组可以容纳在blob字段中。这也将用于存档更改等 发票的销售项目使用CGridView显示。唯一的问题是所有文档都说数据源应该是IDataProvider。我不想将整个对象存储在数据库中,但类似于以下内容: invoice->array( InvoiceHeader->array(//header information), Invoic

我希望这能奏效。。Im正在编写和开票应用程序,并希望将当前发票保存在一个数组中,该数组可以容纳在blob字段中。这也将用于存档更改等

发票的销售项目使用CGridView显示。唯一的问题是所有文档都说数据源应该是IDataProvider。我不想将整个对象存储在数据库中,但类似于以下内容:

invoice->array(
                InvoiceHeader->array(//header information),
                InvoiceItems->array(
                                   item_1->array( 
                                                 item_id-> '1',
                                                 item_count->'3',
                                                 ....
                                                 ),
                                   ),
               ),
在我看来,我想这样做:

$this->widget('zii.widgets.grid.CGridView', array(
               'dataProvider'=>$this->invoiceItems,
              ));

--旁注。永久存储是一系列表,用于保存浏览器错误等的活动记录。当前系统直接在表中执行此操作,但会导致非并发发票编号和不准确的统计数据。

您可以先在CArrayDataProvider中包装数组,然后在CGridView中使用它-

$invoiceItemsDataProvider = new CArrayDataProvider($this->invoiceItems);
$this->widget('zii.widgets.grid.CGridView', array(
               'dataProvider'=>$invoiceItemsDataProvider,
              ));

这是对我的问题和解决方案的扩展。穆克什的答案是100%正确的。但是我需要向网格中添加按钮,但是当我尝试添加删除按钮时,我得到了一个错误。您需要在按钮数组中指定url,如下所示:

 array( // delete button
      'class'=>'CButtonColumn',
      'template'=>'{delete}',
      'buttons'=>array(
              'delete'=>array(
                          'url'=>'Yii::app()->controller->createUrl(\'Invoicing/invoiceBody/test\', array(\'id\'=>$data["id"]))',
                        ),
               ),
                                ),
请注意,id是通过以下方式声明的:

array('id', $data['id'])
不是:


这就是我一直在寻找的解决方案。。这里还有更详细的解释:[链接]。我必须确保id项已传递或Yii已崩溃。对我来说,在使用数组时,网格上仅显示10个元素。旁注。我需要在gridview中添加按钮,但是当我添加删除按钮时,我得到了一个错误消息..为此挣扎了很长一段时间。工作得很有魅力。谢谢
array('id', $data->id)