Yii2 Gridview获取所有分页的所有选中行

nukf8bse  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(160)

我用Pjax小部件 Package 了我的gridview,如下所示

\yii\widgets\Pjax::begin();
    gridview
 \yii\widgets\Pjax::end();

以便在我点击每个分页时使gridview发出 AJAX 请求。
我还在列中使用了['class' => 'yii\grid\CheckboxColumn'],,我发现当我在第一页分页时,我检查了一些行,然后转到第二页并检查了一些行,但当我返回到第一页时,我所检查内容消失了我问题是,如何为所有分页保留所有检查行

bt1cpqcv

bt1cpqcv1#

在目前的条件下(Pjax,多个页面,yii\grid\CheckboxColumn),这是不可能的,因为它的工作方式。
当您单击分页链接时,所有GridView html内容将被来自 AJAX 响应的新内容替换。
因此,很明显,上一页上所有选中的复选框都消失了。
几种可能的解决方法:

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

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

**2)**增加每页显示的行数。
**3)**使用无限滚动扩展,例如this
**4)**在几次迭代中中断所需的操作:

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

您可以按如下方式获取选定的行:

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

piwo6bdm2#

【无限卷轴】:如果你没有pjax过滤器,http://kop.github.io/yii2-scroll-pager/会很好的工作。如果你有过滤器,不要使用这个插件,因为它不支持pjax过滤器。对于其他的应用程序,它是完美的使用。
更新1:它似乎比预期的要直接,这里是我如何完成它
在复选框列中添加以下行

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

现在,将以下JS添加到公共js文件中,该文件将包含在此datagrid所在页面的项目中

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 event handler

$(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);
        });
    }
});

希望能有所帮助。

im9ewurl

im9ewurl3#

我刚刚解决了这个问题,它与Pjax正常工作。
你可以使用我的CheckboxColumn。我希望这能有所帮助。选中的项目用cookie记录。
你可以阅读hezll的//add部分来了解如何修复它,因为我没有提供一个完整的通用版本。
希望对你有用。
https://owncloud.xiwangkt.com/index.php/s/dGH3fezC5MGCx4H

相关问题