【问题标题】:yii2 gridview set checkboxcolumn checkedyii2 gridview 设置复选框列选中
【发布时间】:2015-09-17 22:34:51
【问题描述】:

我需要将机器分配给机器组 (m:n)。机器的安装使得有必要使用带有 checkboxcolumn 的 gridview 将机器分配给一个组。我得到了保存关系的工作,但我没有弄清楚如何在加载时在gridview中检查所有已分配的机器。我的 gridview 的内容是一个基于 MySQL-View 的数据提供者。与

 'checkboxOptions' => function($model, $key, $index, $column) {
     return ['checked' => true];
 }

可以选中所有复选框。但是当我尝试这样做时

 'checkboxOptions' => function($model, $key, $index, $column) {
     $bool = in_array($model->id_machine, common\models\MachineGroup::getAssignedMachines());
     return ['checked' => $bool];
 }

抛出错误:“不能使用 yii\web\View 类型的对象作为数组”。实际上我不明白这里有什么问题,但我找不到将所有已选择机器的数组传递给这个函数的方法(我尝试了很多)。当我在函数中手动定义一个虚拟数组时,一切正常。在这里需要一些帮助...谢谢!

【问题讨论】:

  • 发生错误时,错误信息中带有$bool = in_array($model->id_machine, common\models\MachineGroup::getAssignedMachines());的行高亮显示?
  • 不...这是错误消息:
  • 1.在 C:\xampp\htdocs\eddb1\vendor\yiisoft\yii2\db\ActiveRelationTrait.php 第 458 行
  • 突出显示的行是:"if (($value = $model[$attribute]) !== null) {"
  • common\models\MachineGroup::getAssignedMachines() 方法中可能有什么东西?您可以将其代码添加到问题中吗?

标签: gridview checkbox yii2 datagridviewcolumn


【解决方案1】:

正如我在 cmets 中所写,在回调之外定义变量

$machines = common\models\MachineGroup::getAssignedMachines();

然后在回调函数中

function($model, $key, $index, $column) use ($machines) {
    $bool = in_array($model->id_machine, $machines); 
    return ['checked' => $bool];
}

【讨论】:

  • 你好托尼,你在外面吗?我发布了另一个关于render after post request 的问题,但没有人能回答我的问题。请帮忙,现在卡了一个星期
  • 感谢托尼的提示。正在寻找它。
【解决方案2】:

在 Yii2 GridView 中,您可以准备数据以检查复选框列,通过使用关键字将变量用于匿名函数并使用 in_array() 检查是否选中了正确的复选框。 这是一个例子。

//outside gridview prepare data list for check
$ar = [];
foreach(Model::find()->select(['id'])->asArray()->all() as $key => $val){
    $ar[] = $val['id'];
}

//..... inside checkbox column
    'checkboxOptions' => function($model, $key, $index, $column) use ($ar) {

             $bool = in_array($model->id, $ar);
             return ['checked' => $bool];
    }
//.....

【讨论】:

  • 嗨 Manop Kongoon;您的代码可能是正确的,但在某些上下文中它会做出更好的答案;例如,您可以解释这个提议的更改如何以及为什么会解决提问者的问题,可能包括指向相关文档的链接。这将使它对他们更有用,对正在寻找类似问题的解决方案的其他网站读者也更有用。
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2016-09-25
  • 2010-09-19
  • 2018-11-04
相关资源
最近更新 更多