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

ネストされたテーブルがセル内にある場合は、テーブルをレンダリングしてコンテンツを返すモデルに関数を作成するだけです。ウィジェット関数の 3 番目のパラメーターを 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 に答える