Yii2 Gridview - 如何在页脚属性上使用总计

时间:2015-01-17 19:30:07

标签: php yii2

我的VALUE栏是:

    [
     'attribute' => 'value',
     'format' => 'raw',
     'contentOptions'=>['style'=>'width: 10%;text-align:left'],
     'footer' => ???
    ],

如何在FOOTER属性上使用行总数?

5 个答案:

答案 0 :(得分:13)

它的作品 1.创建类然后2.create列数组,3.configure列,4.configure grid

namespace app\components;
class PTotal {
public static function pageTotal($provider, $fieldName)
{
    $total=0;
    foreach($provider as $item){
        $total+=$item[$fieldName];
    }
    return $total;
}
$provider = new ActiveDataProvider([
'query' => $query,
'sort' => $sort,
]);


$grid_columns=[         
[
    'attribute' => 'saldo_in',
    'footer'=>PTotal::pageTotal($provider->models,'saldo_in'),
]
]

echo GridView::widget([
'dataProvider' => $provider,
'showFooter'=>TRUE,
'footerRowOptions'=>['style'=>'font-weight:bold;text-decoration: underline;'],
'columns' =>$grid_columns,
]); 

答案 1 :(得分:3)

上面的视图文件中的

通过以下代码计算页脚总和

    $amount = 0;
    if (!empty($dataProvider->getModels())) {
        foreach ($dataProvider->getModels() as $key => $val) {
            $amount += $val->amount;
        }
    }

现在在你的gridview使用中只需传递金额变量,如下所示

[
     'attribute' => 'amount', 'label' => 'Charged Amount',
     'value' => function ($model, $key, $index, $widget) {
              return Yii::$app->formatter->asCurrency($model->amount, 'INR');
              },
     'footer' => $amount,
   ],

我试过它会起作用......

答案 2 :(得分:2)

我没有试过这个,但尝试定义这样的列。

在文件顶部定义

$total = 0;

然后像这样定义列:

[
     'attribute' => 'value',
     'format' => 'raw',
     'contentOptions'=>['style'=>'width: 10%;text-align:left'],
     'value'=>function ($model, $key, $index, $widget) use ($total) {
        $total += $model->value;
        return $model->value;
     },
     'footer' => function () use ($total) 
     {
        //format the total here
        return $total;
     },
],

现在有几个问题,因为他们使用http://demos.krajee.com/grid意味着它只会添加显示的内容,如果你有分页,它只会显示该页面上的总数。

如果你想要所有记录的总数,你应该使用没有分页的数据提供者手动添加它。

我再次尝试过这一点,只是试一试。

答案 3 :(得分:1)

yii2将不支持'footer'=>函数()使用($ total)

  • 一栏的总计对我来说在yii2中如下所示:

在网格视图中,例如:对于total_hours列,您需要显示页脚及其总计total_hours的总和,然后通过在gridview中扩展该列,在页面上方声明变量total,并开始griview覆盖列,指定总通过次数通过引用从每行或记录中添加total_hours,最后将值分配给gridview页脚属性。

                       [
                            'header' => 'total_hours',
                            'attribute' => 'total_hours',
                            'value'=>function ($model, $key, $index, $widget) use (&$total) {
                                $total += $model->total_hours;
                                $widget->footer = $total;
                                return $model->total_hours ;
                            },                          
                         ],

并添加'showFooter'=> true,

答案 4 :(得分:0)

我按照你的说法尝试但是向我显示错误: trim()期望参数1为字符串,给定对象

protected function renderFooterCellContent()
{
    return trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell;
}

在Yii 1中工作正常,我只是在Model

中创建了这个函数
public function getTotals($ids)
        {
            if($ids){
                $ids = implode(",",$ids);
                $connection=Yii::app()->db;
                $command=$connection->createCommand("SELECT SUM(value) FROM `tb_cashbook` where id in ($ids)");
                $amount = $command->queryScalar();
                return "R$ ".Yii::app()->format->formatNumber($amount);
                }
                else 
                return null;
        }

在View中,这种方式在页脚属性中:

'footer'=>"<strong>".$model->getTotals($model->search()->getKeys())." </strong>",