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

时间:2014-07-24 13:29:20

标签: javascript jquery jqgrid rows

我想以编程方式选择jqgrid中所有页面的所有行以获取批量更新实用程序。我该如何实现这一目标?我尝试过很多东西,但似乎都没有用。任何人都可以指出我正确的方向。 我的代码如下:

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

谢谢,

阿妮塔

2 个答案:

答案 0 :(得分:3)

首先,了解jqGrid仅支持在当前页面上选择行非常重要。 jqGrid的设计是在没有支持本地数据分页时完成的。

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

只有在使用multiselect: true选项时才可以选择多行作为一行。在jqGrid自动添加带有chechboxes的列的情况下,它会在列标题中添加复选框。通过检查chechbox,可以选择curect页面中的所有行。 Chechbox的id前缀为cb_,后跟网格的id。例如,如果网格的ID为cb_template-list,则为template-list。所以你可以使用以下代码

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

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

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

结果是,在显示页面后,将直接选择每页上的所有行。

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

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

答案 1 :(得分:0)

我想选择jqgrid的所有行的原因是我可以使用selarrrow获取所有这些行的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

}

它有效!感谢你们两个人的时间和帮助!!!