【问题标题】:yii gridview set checkbox without $model valueyii gridview 设置没有 $model 值的复选框
【发布时间】:2017-09-07 19:15:59
【问题描述】:

我的问题是我无法将必要的值放入我的 gridview 的复选框值字段中。复选框字段可以选中或取消选中。 因此,在数据库中有一个名为 member 的布尔字段,对于具有 0 的数据网格值不检查,而检查 1。

通常gridview 有四列。出于测试目的,我在复选框列前面的额外字段中打印数据库表的列“成员”,以查看表列“成员”的值是否正确。

因为视图有两个不同的 dataProvdider,$dataProvider 和 $dataProviderMembers,我不能使用 $model 对象。 $model 对象属于 $dataProvider 的内容。 dataviewgrid 将由第二个数据提供者 $dataProviderMembers 填充。

<?= GridView::widget([
        'dataProvider' => $dataProviderMembers,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'id',
            'firstname',
            'lastname',
            'member',
            ['class' => 'yii\grid\CheckboxColumn', 'checkboxOptions' => function($model, $key, $index, $column){
                return ['checked' => 'member'];
            }, 'header' => 'Mitglied'
            ],
            ]
    ]); ?>

控制器方法:

$searchModel = new PeriodeClassSubjectMembersSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

$modelPeriodeClassSubjectMembers = new PeriodeClassSubjectMembers();
        $dataProviderMembers = $modelPeriodeClassSubjectMembers->getPeriodeClassMembers($class_id, $periode_id, false);
        $dataProviderMembers->key = 'id'; //set this to make the id column as value columns in the gridview for javascript getselectedrows instead of the gridrow number
        return $this->render('viewmysubject', [
            'model' => $this->findModel($id),
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'dataProviderMembers' => $dataProviderMembers
        ]);

$dataProviderMembers 的模型方法:

$query = new Query();
        $query->select(..........);

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

return $dataProvider;

使用此方法,复选框字段未正确填写。

通常复选框字段将由段填充

return ['checked' => $model->member};

在这种情况下,没有带有成员值的 $model。 $model 属于 $dataProvider 的数据。

但我从 $dataProviderMembers 获取成员的值。 正如我在“成员”列中看到的那样,它位于数据网格的复选框字段之前,数据库中的值被正确填充到网格中。如何在没有 $model 的情况下填充复选框字段,而不是使用后面的 sql 查询的“成员”列的值($dataProviderMembers 的成员值)?这意味着类似:

return ['checked' => 'member'];

【问题讨论】:

    标签: checkbox datagridview yii2 set checked


    【解决方案1】:

    在您的网格视图中,dataProvider 等于 $dataProviderMembers 那么 checkboxOptions 的匿名函数中的 $model 参数与应该包含成员值的模型相关 所以你可以使用 $model->member 来获得价值

            [   'class' => 'yii\grid\CheckboxColumn', 
                'checkboxOptions' => function($model, $key, $index, $column){
                return ['value' => $model->member];
               }, 
            ],
    

    或者如果dataProvider是一个数组

          [   'class' => 'yii\grid\CheckboxColumn', 
                'checkboxOptions' => function($model, $key, $index, $column){
                return ['value' => $model['member']];
               }, 
            ],
    

    【讨论】:

    • 您确定您的 dataProvider 是 $dataProviderMembers 并且确实包含属性成员.. 请尝试添加控制器操作代码。
    • 是的,dataggridview 将由 $dataProviderMembers 正确填充。我还可以在我为测试目的创建的附加列“成员”中看到正确的成员值(复选框列之前的列),我现在还添加了控制器功能的主要部分。
    • 列成员是附加列? .请显示相关模型以及如何填充此字段..(ps ..您如何操作发送/渲染 $dataProvider 但未设置此 dataProvider?)
    • datagrid 视图中复选框列前面的附加列成员只是用于测试的临时工具,以查看成员值是否正常工作以及从模型中查看它们是否正确。成员的值是正确的,但我需要它们来设置复选框字段,这不起作用。 $dataProvider 用于将其他数据获取到视图中,并在控制器中设置(有问题的控制器信息已更新)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2015-05-28
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多