0

我是 Yii2 的新手。我有一个 gridview,其中 2 列是自动生成的(不在模型类中)。每行都有一个按钮,单击该按钮时,我想访问当前行单元格的值并进行一些计算。

我无法使用$data,因为它仅指当前模型行。下面是我的代码:

<?php 

echo GridView::widget([
    'dataProvider' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
    'filterModel' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
    'columns' => [                                          
        [
            'label' => 'Amount',
            'format' => 'raw',
            'value' => function ($data) {
                return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
            },
        ],                      
        [
            'label'=>'Total',
            'format' => 'raw',
            'value' => function ($model, $key, $index, $column) {
                //return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;

                return '' . $column ;                       
            },
        ],                                                  
    ],
]); ?>

amount和列值是动态计算的Total,但我无法在其他单元格中访问这些值:(

4

1 回答 1

0

您可能已经知道,由于这些列是动态的,您无法从其他列访问它们。

我会为模型类中的两个动态列(金额和总计)创建函数来计算您的动态列。在您单击行中的按钮后,通过 pajax 刷新网格。

您还可以像这里提到的那样向 gridview 添加其他数据

通过扩展您的 gridview 模型或使用内联函数(req. PHP 5.3+)。但是,如果它们完全由每一行动态计算,那么您还必须再次计算每一列的值。

但我想你的简单错误是你使用一次

'value' => function ($data) {

还有一次

'value' => function ($model, $key, $index, $column) {

这两个函数都是正确的。一次通过参数“name”$data 将模型传递给函数,另一次通过“name”$model 传递模型。在函数内部,您只能访问传递给函数的参数。

您的第二个内联函数代码应使用 $model 而不是 $data (第一个参数名称是模型)。

 return $model->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;

但正如我提到的,我会在你的 Model 类中创建一个函数

public function getAmount() {
    return $this->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
}

我不明白的是你的 Total 只是金额 * 2 ?但我想这只是一些测试代码。

于 2015-04-29T08:38:18.570 回答