使用数组作为CGridView的数据源

时间:2012-03-02 18:52:07

标签: php yii

我希望这会起作用..我正在编写和开发票应用程序,并希望将当前发票保存在一个可以放在blob字段中的数组中。这也可用于存档更改等。

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

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

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

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:4)

这是我的问题和解决方案的扩展。穆克什的回答是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'])

array('id', $data->id)