在gridview yii2的复选框列中选择所有页面的所有记录

时间:2015-10-18 23:38:16

标签: php gridview yii2 yii2-advanced-app

我想知道yii2 gridview复选框列中是否有任何内置选项,一次选择/取消选择所有行。

例如,如果我在gridview中有500条记录并且我一次显示100条记录,那么我一次只能选择100条记录并执行任何批量操作。

我希望用户能够一次选择所有500条记录,并立即对这些记录执行任何批量操作。希望大家都能得到我的问题

我向github的yii框架所有者提出了建议,他们已经确认他们会很快完成此增强功能,并将此问题放在增强部分中,因此希望他们尽快将其包含在内,但直到那时为止我以任何其他方式实现这一目标

谢谢

3 个答案:

答案 0 :(得分:2)

是的,您可以使用CheckBoxColumn。只需将以下几行添加到GridView的列数组中:

[
     'class' => 'yii\grid\CheckboxColumn',
     'name' => 'id'
],

作为Yii2's正式文件:

  

CheckboxColumn在网格视图中显示checkboxes列。   要向CheckboxColumn添加yii\grid\GridView,请将其添加到列配置中,如下所示:

'columns' => [
// ...
    [
        'class' => 'yii\grid\CheckboxColumn',
        // you may configure additional properties here
    ],
]
  

用户可以点击checkboxes来选择网格行。可以通过调用以下JavaScript代码来获取所选行:

var keys = $('#grid').yiiGridView('getSelectedRows');
// keys is an array consisting of the keys associated with the selected rows

答案 1 :(得分:0)

在使用分页时,您必须通过执行发布请求来“保存”每个分页上的选定网格项(序列化表单并执行ajax请求)。 然后使用提交的ID在您的页面上有一些预选部分。

在此预选部分中,向页面显示一些复选框(复选框组),其中预选的ID不在当前网格页面上,而是一个简单的文本以指示它是哪个项目(名称等)。

因此,在当前网格页面上,您选择带有网格复选框的项目,当您对这些“选定”复选框进行分页时,会在此预选部分中呈现这些复选框。

这样您可以选择多个页面上的项目,也可以取消选择页面上没有的项目。

在您的“操作”中,您只需将两个复选框组合在一起即可获取所有选定项目。

yii1提到的here

有类似的内容

还有一个yii1扩展来执行此操作here也许您将复制yii2中的代码或找到一些类似的扩展名。

答案 2 :(得分:0)

默认情况下,尚未实现。但您可以保存密钥以供日后使用。这是基本的想法,我希望它能给你一个开始。

<script type="text/javascript">
$(document).ready(function (){
    var selectedItems = [];

    $('#delete_selected_items_btn').click(function (){
        selectedItems = selectedItems.concat($('.grid-view').yiiGridView('getSelectedRows'));
        // select all rows on page 1, go to page 2 and select all rows.
        // All rows on page 1 and 2 will be selected.
        console.log(selectedItems); 
    })
})
</script>

我的假设是您正在使用Pjax进行gridview。

相关问题