以编程方式选择jqgrid所有页面的所有行

selecting all the rows of all the pages of a jqgrid programmatically?

本文关键字:编程 选择 jqgrid 方式      更新时间:2023-09-26

我想以编程方式选择jqgrid中所有页面的所有行,以用于批量更新实用程序。我该如何做到这一点?我试了很多方法,但似乎都不奏效。有人能给我指个方向吗?我的代码如下:

var tot_rows=$("#template-list").jqGrid('getGridParam', 'records');
for(var i=1; i<=tot_rows; i++)
{
   $('#template-list').setSelection(tot_rows[i], true);
}

谢谢,安妮塔

首先,重要的是要理解jqGrid只支持当前页面 上的行选择。jqGrid的设计是在不支持本地数据分页的情况下完成的。

下一个问题是只能在数据加载到网格之后才能选择数据。例如,可以使用loadCompleted来选择一些行。

只有在使用multiselect: true选项时才可以选择多行作为一行。在这种情况下,jqGrid自动添加带有复选框的列,并在列标头中添加复选框。通过选中复选框,可以选择当前页面中的所有行。复选框有id,其前缀为cb_,后跟网格的id。例如,如果网格的id为template-list,则为cb_template-list。因此,您可以使用以下代码

loadComplete: function () {
    $("#cb_" + this.id).click();
}

或者,如果网格的id可以包含一些特殊字符,那么最好是

loadComplete: function () {
    $("#cb_" + $.jgrid.jqID(this.id)).click();
}

结果显示后,每页上的所有行将被直接选中。

UPDATE: Free jqGrid支持multiPageSelection: true选项,它与multiselect: true结合使用。它允许在多个页面上保持参数selarrrow 。默认情况下,jqGrid在分页期间重置数组selarrrow,但在使用multiPageSelection: true, multiselect: true的情况下,它不会这样重置。此外,在构建页面期间,它预选择 selarrrow数组中的所有行。因此,如果用项目的所有行(所有页面上的所有行)填充selarrrow数组,那么行将被选中显示。用户仍然可以取消选择一些行,jqGrid将不会更改用户所做的更改。

顺便说一下,如果数据是从服务器加载的,可以在beforeProcessing回调中填充selarrrow数组

我之所以要选择jqgrid的所有行,是因为我可以使用selarrow获得所有行的id。但是我最终发现,因为这是我想选择所有它们的唯一原因,所以我也可以用下面的方法来做

var tot_rows=$("#template-list").jqGrid('getGridParam', 'records');
var mydata = $('#template-list').jqGrid('getGridParam','data');
var indexes = $('#template-list').jqGrid('getGridParam', '_index');
for(var i=1; i<=tot_rows; i++)
{
    recId=mydata[indexes[i]].recId;
    //some processing

}

它工作!!感谢你们俩的时间和帮助!!