当前位置: 首页 > 知识库问答 >
问题:

yii2\kartik\grid\CheckboxColumn

彭宏义
2023-03-14

我在yii2网格中添加了一个复选框列,并创建了一个可以删除所有选定值的按钮。然而,在我的动作中,我有可能删除图标只显示依赖,如下所示。

“删除”=

/* add public function in model i,e GetstopDelete*/

if(empty($model->stopDelete))
return true;
else
return $model->stopDelete == 1 ? false : true;
}


},

但是,我如何隐藏基于相同参数的复选框的单元格,因为我不希望复选框可用,如果你不能删除行?

我在用http://demos.krajee.com/grid#checkbox-column和http://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html

共有3个答案

卫鸿朗
2023-03-14

我的工作代码基于泰基隆的回答。

添加了下面的网格列

'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1,
            'onclick'=>'
                        $(".kv-row-checkbox").prop("checked", $(this).is(":checked"));
                        if($(".kv-row-checkbox").prop("checked") === true) $(".delete_ready").attr("class","delete_ready warning");
                        if($(".kv-row-checkbox").prop("checked") === false) $(".delete_ready").attr("class","delete_ready");


                        ']),
        'contentOptions'=>['class'=>'kv-row-select'],
        'content'=>function($model, $key){

            if(isset($model->stopDelete)&&($model->stopDelete!==1))
            return Html::checkbox('id[]', false, ['class'=>'kv-row-checkbox ',
                    'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("warning");', 'disabled'=> isset($model->stopDelete)&&($model->stopDelete===1)]);
            else
                return '';
            //return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
        },
        'hAlign'=>'center',
        'vAlign'=>'middle',
        'hiddenFromExport'=>true,
        'mergeHeader'=>true,
        'width'=>'50px'
    ],

添加了以下行选项

'row_options'=>function($model){
            if(empty($model->stopDelete)){
                return ['class' => 'delete_ready'];
            }

使用以下javascript//删除选定行$(文档)。在('单击','删除选定',函数()上){

        var table = $('#deleteSelected').attr('value');
        var keys = new Array();//[];//$('.deletSelectedItem:checked').val();
        var path = 'global/deleteselected';
        var current_page = location.pathname.substring(1);//window.location;

        var c = 0;
        $("input[name='id[]']:checked").each( function () {

                keys[c] = $(this).val();
                c++;
        });

        if( current_page.indexOf("index") >= 0){
            path = '../global/deleteselected';
        }


        if(keys.length ==0){

            krajeeDialog.alert("No Recorlds Selected")

        }
        else {

            if(keys.length ==1)
                var s = '';
            else
                var s ='s';

            krajeeDialog.confirm("Are you sure you want to delete the selected "+keys.length+" recorld"+s+"?", function (result) {

                if (result) {

                    $.post({
                        url: path,
                        data: {keylist: keys, table:table},
                        success: function (data) {

                            if( current_page.indexOf("index") >= 0)
                                $.pjax.reload({container: "#"+table});
                            else
                                $.pjax.reload({container: "#"+table, url: table});


                        }, error: function (xhr, status, error) {
                            alert(status + error);// check status && error
                        },
                    });

                }
            });
        }


});

工作正常。谢谢你的帮助泰基隆

壤驷安和
2023-03-14

您可以执行一些技巧,例如使用普通列并自己绘制复选框事件。它看起来像:

[
    'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 'onclick'=>'$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));']),
    'contentOptions'=>['class'=>'kv-row-select'],
    'content'=>function($model, $key){
        return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
    },
    'hAlign'=>'center',
    'vAlign'=>'middle',
    'hiddenFromExport'=>true,
    'mergeHeader'=>true,

],

这样,您可以更好地控制行为。

司徒修能
2023-03-14

这似乎是一个老问题,但这是我的方法:

[
    'class' => '\kartik\grid\CheckboxColumn',
    'checkboxOptions' => function($model) {
        if(!$model->status){
           return ['disabled' => true];
        }else{
           return [];
        }
     },
],

即使使用默认的yii CheckboxColumn,这也可以工作

 类似资料:
  • 我正在使用带有“预设下拉”选项的Kartiks DateRangePicker。这将提供一些默认值,以便搜索、今天、昨天、最后7天等。 产生选择器的代码: SearchItem类: 我遇到的问题是,当使用或选项时,它会生成以下查询: 所以它在查询凌晨12点突然创建的物品。有人知道这可能是什么吗,非常确定这不是默认行为,所以一定是我做错了什么。

  • 我想使用kartik sidenav小部件。我通过composer安装了kartik-v/yii2小部件扩展。 我可以在这里看到:advanced\vendor\kartik-v\yii2 widget sidenav和extensions。php也进行了修改: 然而,在我看来,当我试图使用它时, 它显示类kartik\小部件\SideNav'未找到错误什么是错误的?

  • 我正在使用Kartik Gridview。导出工作正常,但不会导出摘要数据,而是在视图中显示良好。我还想更改下载文件的文件名。 我尝试过这个代码,但似乎没有任何效果 也就是说,我在

  • 我已经搜索并尝试了每个论坛和例子。 我正在Yii2中使用Kartik\DetailViwew,无法在buttons1选项中设置一个自定义按钮。 我正在处理的代码: 在的 根据http://demos.krajee.com/detail-view例子,有一种方法可以定制。但是没有例子。留档没有解释如何做到这一点。 有人能帮忙吗?

  • 我曾多次尝试安装Kartik Grid Extension,但都因以下错误而失败: 设置未知属性:yii\bootstrap\ButtonDropdown::containerOptions 错误位于/Applications/MAMP/htdocs/business/vendor/yiisoft/yii2/base/Component中。php 第197行 我的看法是: 并在web中配置模块。p

  • 这是情况:我是第一次在Yii2上,想在ActiveForm中使用一些文件上传器小部件...到目前为止,我已经找到了这个出色的:\kartik\widget\FileInput 有了这个小部件,我可以管理文件上传,然后,当进入编辑模式时,显示以前上传的图像和替换它的机会。 问题是,如果我按下表单的“更新”按钮而不修改图像,yii说图像“不能是空的”,因为我在模型中设置了“必需”规则。