我想知道yii2 gridview复选框列中是否有任何内置选项,一次选择/取消选择所有行。
例如,如果我在gridview中有500条记录并且我一次显示100条记录,那么我一次只能选择100条记录并执行任何批量操作。
我希望用户能够一次选择所有500条记录,并立即对这些记录执行任何批量操作。希望大家都能得到我的问题
我向github
的yii框架所有者提出了建议,他们已经确认他们会很快完成此增强功能,并将此问题放在增强部分中,因此希望他们尽快将其包含在内,但直到那时为止我以任何其他方式实现这一目标
谢谢
答案 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。