我的VALUE栏是:
[
'attribute' => 'value',
'format' => 'raw',
'contentOptions'=>['style'=>'width: 10%;text-align:left'],
'footer' => ???
],
如何在FOOTER属性上使用行总数?
答案 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)
在网格视图中,例如:对于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>",