1

是否可以使用 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 之类的小部件的更简洁的解决方案。

谢谢

4

2 回答 2

2

如果嵌套表格在单元格内,那么您可以,只需在模型中创建将呈现表格并返回内容的函数。您可以将小部件函数的第三个参数设置为 true 以返回内容。如果要为嵌套表启用分页,请务必手动设置小部件 ID 并允许 ajax 更新。

在模型中:

function getNestedTable() {

  return Yii::app()->controller->widget(..., ..., true);

}

在列定义中使用:

'columns' => array(
  array(
  'name' => 'nestedTable',
  'type' => 'raw'
  )
)
于 2012-11-02T23:23:50.933 回答
1

我认为实现您想要的最佳方法是在您的 CActiveRecord 模型中使用自定义函数(如果您有网格的 CActiveDataprovider),并将“嵌套表”作为普通列:

| Transaction  | Item | Price |    Total |
------------------------------------------
| T-001        | I-1  |  $50  |     $100 | 
               | I-2  |  $50  | 
------------------------------------------
| T-002        | I-3  |  $90  |     $90  |
------------------------------------------

在您的模型中,您必须定义在 HTML 中返回带有换行符的数据的 get 函数(例如使用 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'
    )
);
于 2012-06-12T08:10:14.870 回答