используя массив в качестве источника данных для CGridView - PullRequest
8 голосов
/ 02 марта 2012

Я надеюсь, что это сработает. Я пишу и выставляю счет-фактуру приложения и хотел бы сохранить текущий счет в массиве, который можно разместить в поле 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,
              ));

- примечание. Постоянное хранилище представляет собой серию таблиц, которые будут использоваться для хранения активных записей в случае ошибок браузера и т. Д. Текущая система делает это непосредственно в таблицах, но приводит к одновременным номерам счетов и неточной статистике.

Ответы [ 2 ]

15 голосов
/ 03 марта 2012

вы можете сначала обернуть ваш массив в CArrayDataProvider, а затем использовать его в CGridView -

$invoiceItemsDataProvider = new CArrayDataProvider($this->invoiceItems);
$this->widget('zii.widgets.grid.CGridView', array(
               'dataProvider'=>$invoiceItemsDataProvider,
              ));
4 голосов
/ 03 марта 2012

Это расширение к моей проблеме и ее решению.Ответ Мукеша на 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"]))',
                        ),
               ),
                                ),

обратите внимание, что идентификатор объявлен с использованием:

array('id', $data['id'])

, а не:

array('id', $data->id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...