是否可以使用cgridview创建嵌套表?
我希望最终输出如下
| Transaction | Total |
| T-001 | $100 |
| Item | Price | // here is the nested table
| I-1 | $50 |
| I-2 | $50 |
| T-002 | $90 |
| Item | Price | // here is the nested table
| I-3 | $90 |
我知道您可以使用自定义模板执行此操作,但我想使用像CGRidView这样的小部件更简洁的解决方案。
由于
答案 0 :(得分:2)
如果嵌套表在单元格内部,那么您可以在模型中创建将呈现表格并返回内容的函数。您可以将widget函数的第三个参数设置为true以返回内容。如果要为嵌套表启用分页,请确保手动设置小部件ID并允许ajax更新。
模特:
function getNestedTable() {
return Yii::app()->controller->widget(..., ..., true);
}
在列定义中使用:
'columns' => array(
array(
'name' => 'nestedTable',
'type' => 'raw'
)
)
答案 1 :(得分:1)
我认为实现您想要的最佳方法是在CActiveRecord模型中使用自定义函数(如果您有网格的CActiveDataprovider),并将该“嵌套表”作为普通列:
| Transaction | Item | Price | Total |
------------------------------------------
| T-001 | I-1 | $50 | $100 |
| I-2 | $50 |
------------------------------------------
| T-002 | I-3 | $90 | $90 |
------------------------------------------
在你的模型中,你要定义get函数,这些函数在HTML中用换行符返回数据(例如用br:
class Item extends CActiveRecord {
...
public function getIdItems()
{
$string = '';
foreach($this->items as $item) {
if ($string != '') $string .= '<br/>';
$string .= ' '.$item->textId; // 'I-3', 'I-2'...
}
return $string;
}
public function getPriceItems()
{
$string = '';
foreach($this->items as $item) {
if ($string != '') $string .= '<br/>';
$string .= ' '.$item->price; // $50, $90...
}
return $string;
}
...
}
并显示网格中的新列:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'anotacionesGrid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'transaction',
'idItems:html:Item',
'priceItems:html:Price',
'total'
)
);