如何在 yii2 gridview 中根据条件隐藏列?

How to hide columns based on condition in yii2 gridview?

我在我的索引页中放置了一个条件语句。

控制器

$type ="402"; // type can me 401 and 403
 $searchModel = new MdcmetersdataSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'type'  => $type
        ]);

Index.php

<?php
if($type == '401')
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'current_p1',
        'current_p2',
        'current_p3',        
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];



}else if($type == '402')
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'voltage_p1',
        'voltage_p2',
        'voltage_p3',      
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];
}
else if($type == "403")
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'kwh',
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];

}
else
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'voltage_p1',
        'voltage_p2',
        'voltage_p3',
        'current_p1',
        'current_p2',
        'current_p3',
        'device_id',
        'kwh',


        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];

}
?>
<?=
GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $columns
]);
?>

上面说到$type的值可以是401, 402 and 403。所以我想检查我的情况是否有效。所以我传递 402 这意味着只应显示具有 voltages 值的列,但我得到以下结果

我想隐藏红色圆圈列,即我只想显示特定 $type 值的数据。

非常感谢任何帮助。

如果您希望hide/don不显示没有 402 电压值的行,最简单的方法是避免在搜索查询中进行选择。 为此,您可以在搜索模型中添加适当的 402 搜索功能

/**
 * Creates data provider instance with search query applied
 *
 * @param array $params
 *
 * @return ActiveDataProvider
 */
public function search($params)
{
   ........

    return $dataProvider;
}


public function search402($params)
{
    $query = YourModel::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $query->andWhere(['not', ['volt1' => null]]);

    ;
    return $dataProvider;
}

并在控制器中管理您真正需要的搜索功能

$searchModel = new MdcmetersdataSearch();
switch($type){
    case '402':
    $dataProvider = $searchModel->search402(Yii::$app->request->queryParams);
    break;
    ....
}