Yii2 Gridview为所有分页获取所有选定的行

时间:2015-05-06 02:14:02

标签: yii yii2

我用我的

包装了我的gridview和Pjax小部件
 \yii\widgets\Pjax::begin();
    gridview
 \yii\widgets\Pjax::end(); 

为了在我点击每个分页时使gridview发出ajax请求。

我也在列中使用['class' => 'yii\grid\CheckboxColumn'],。 我发现当我第一次分页时,我检查了一些行,然后转到第二页并检查了一些行,但是当我回到第一页时,我检查过的内容已经消失了。 我的问题是如何为所有分页保留所有的checkrow

3 个答案:

答案 0 :(得分:1)

根据当前条件(Pjax,多页,yii\grid\CheckboxColumn),由于它的工作方式,它是不可能的。

当您点击分页链接时,所有GridView html内容都会被来自AJAX响应的新内容替换。

很明显,上一页上所有选中的复选框都已消失。

解决这个问题的可能方法很少:

1)编写自定义javascript和服务器端逻辑。

作为选项之一,您可以向服务器发送AJAX请求,其参数意味着用户已选择为批量删除操作选择所有数据(或使用单独的控制器操作进行批量删除)。在这种情况下,实际上我们不需要从用户那里获取所选数据,因为我们可以从数据库中获取它们(信用 - Seng)。

2)增加每页显示的行数。

3)使用无限滚动扩展名,例如this

4)在多次迭代中打破所需的操作:

  • 在第一页上选择所需的行,执行操作(例如,删除)。
  • 再次对其他页面重复此操作。

您可以获得这样的选定行:

$('#your-grid-view').yiiGridView('getSelectedRows');

答案 1 :(得分:0)

[无限滚动]:如果没有任何pjax过滤器,http://kop.github.io/yii2-scroll-pager/会很好用。如果您还在使用过滤器,请不要使用此插件,因为它不支持pjax过滤器。对于其余应用程序,它是完美的使用。

Update1:​​似乎比预期的要直接,这是我的完成方式

将以下行添加到复选框列

'checkboxOptions' => function($data){
                        return ['id' => $data->id, 'onClick' => 'selectedRow(this)'];
                    }

现在将以下JS添加到该数据网格所在页面的项目中的通用js文件中

var selectedItems=[]; //global variable
/**
 * Store the value of the selected row or delete it if it is unselected
 * 
 * @param {checkbox} ele 
 */
function selectedRow(ele){
    if($(ele).is(':checked')) {
        //push the element
        if(!selectedItems.includes($(ele).attr('id'))) {
            selectedItems.push($(ele).attr('id'));
        }
    } else {
        //pop the element
        if(selectedItems.includes($(ele).attr('id'))) {
            selectedItems.pop($(ele).attr('id'));
        }
    }
}

上面的函数会将选定的行ID存储在全局变量数组中

现在将以下行添加到pjax:end事件处理程序

$(document).on('pjax:end', function () {
    //Select the already selected items on the grid view
    if(!empty(selectedItems)){
        $.each(selectedItems, function (index,value) {
            $("#"+value).attr('checked',true);
        });
    }
});

希望有帮助。

答案 2 :(得分:-1)

我刚解决了这个问题,它可以正常使用Pjax。

您可以使用我的CheckboxColumn。我希望这可以提供帮助。已检查的项目使用cookie记录。

你可以通过hezll的// add来阅读这个部分,以了解如何修复它,因为我没有提供完整的通用版本。

希望它适合你。

https://owncloud.xiwangkt.com/index.php/s/dGH3fezC5MGCx4H