首页 > 解决方案 > 如何在 yii2 中将复选框列添加到现有的 gridview 列?

问题描述

我想向 gridview 添加一列,但我不想列出所有列(因为默认有一些列)。我知道我可以通过以下方式添加一列:

$widget = Yii::createObject([
    'class' => 'yii\grid\GridView',
    'dataProvider' => $dataProvider,
    'columns' => [
        'col1',
        'col2',
        'class' => 'yii\grid\CheckboxColumn',
    ]
]);

但我不想列出所有默认列,只添加一个复选框列。像下面这样:

$widget = Yii::createObject([
    'class' => 'yii\grid\GridView',
    'dataProvider' => $dataProvider,
    'columns' => [
        'class' => 'yii\grid\CheckboxColumn',
    ]
]);

然后它将显示在默认列的末尾。我该怎么做?

标签: gridviewyii2

解决方案


yii 框架不支持这种需求。我们可以通过其他方式做到这一点。

第一个:获取所有列名并在显示列表之前插入复选框列

$query = DataModel::find()->select('...')->asArray();

$columns = array_keys($query->one()); // if you know that all column names can also be assigned directly without dynamic acquisition
array_unshift(['class' => \yii\grid\CheckboxColumn::class], $columns);

$widget = Yii::createObject([
    'class' => 'yii\grid\GridView',
    'dataProvider' => new \yii\data\ActiveDataProvider([
        'query' => $query,
    ]),
    'columns' => $columns,
]);

]);

第二:扩展yii\grid\GridView::initColumns()yii框架的方法。例如:

class MyGridView extends \yii\grid\GridView {
    public $expandColumns = [];

    protected function initColumns() {
        parent::initColumns();
        \yii\helpers\ArrayHelper::merge($this->columns, $this->expandColumns);
    }
}

// in view
$widget = Yii::createObject([
    'class' => MyGridView::class,
    'dataProvider' => $dataProvider,
    'expandColumns' => [
        [
            'class' => \yii\grid\CheckboxColumn::class,
        ],
    ]
]);

从谷歌翻译回答翻译,希望对你有所帮助。


推荐阅读