我希望这会起作用..我正在编写和开发票应用程序,并希望将当前发票保存在一个可以放在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,
));
- 旁注。永久存储是一系列表,这将用于保存活动记录包含浏览器错误等。当前系统直接在表中执行此操作,但会导致非并发发票编号和不准确的统计信息。
答案 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)