无法在加载期间在 jqGrid 上为其状态保存分配预过滤器

Unable to assign a pre-filter on jqGrid during its load time for its state saving

我正在使用 jqGrid,如果用户执行了一些搜索并且网格根据搜索条件显示记录,我需要保存它的特定状态。当用户执行搜索并单击编辑按钮来编辑记录时,我需要根据搜索条件在显示的记录的最后左侧状态中显示网格。只是绕过了 Oleg 的几个答案,但仍然无法让我的东西工作。我的 jqGrid 代码如下:

$('#grid').jqGrid({
url: GetPath,
datatype: 'json',
mtype: 'POST',
search: true,
postdata: {filters: postfilt, sord: postsord, sidx: postsort },
colNames: // ColumnNamesArray
colModel: //The ColumnModel.
page: postpage,
pager: jQuery('#pager'),
rowNum: 10,
rowList: [10, 20, 30, 40],
viewrecords: true,
sortname: 'DefaultSortColName',
sortorder: 'DESC',
loadonce: true,
gridview: true,
ignoreCase: true,
jsonReader: {
root: 'rows',
page: 'page',
total: 'total',
records: 'records',
repeatitems: false,
userdata: 'userdata',
Id: 'PrimaryKeyId'
},
autowidth: true,
multiselect: false
)};

我有一个通用的 js 文件,其中包含 jqGrids 代码。每次我需要填充 jqGrid 时,我只需要调用 js 文件,然后我需要设置几个 javascript 变量,例如:指定 jqgrid 的 url 等。注意变量名称postfiltpostsordpostsort。我只是根据我的要求为这些变量赋值:当我的网格第一次加载时,过滤器是空白的,以便用所有数据加载网格,并为这些变量分配我拥有的 postdata 过滤器值当用户应用某些过滤器时更早保存。我面临的问题是,我的这种动态过滤器功能适用于我实现它的第一个网格。但它不适用于我试图在其上实现它的其他网格。(当然,不同的网格搜索过滤器是为不同的网格保存的)。我在 Chrome 的 F12 中调试时检查过,我的过滤器变量确实显示了为 jqGrids postData 过滤器提供的正确值,但它仍然每次都将所有数据加载到 jqGrid 而不是需要时过滤。我尝试了几次在 gridCompleteloadComplete 中调用函数以在加载我的网格后提供 postdata 过滤器,但仍然无法填充我的jqGrid 在其第一次加载时具有最后提供的搜索条件。在为 jqgrid 提供标准以便在第一次加载时将其加载到最后一个左侧状态时,我哪里错了?感谢任何帮助。

编辑:我为 jqGrid 保存的一个 postdata 搜索过滤器如下:

{"groupOp":"AND","rules":[{"field":"ClientName","op":"cn","data":"client"}]}

你的问题的主要原因是你使用了错误的参数。 JavaScript 区分大小写。没有 postdata 参数。所以它会被 jqGrid 忽略。相反,存在 postData 参数。因此,要包含过滤器并将请求中的初始排序设置为 url: GetPath,您需要执行以下操作:

$('#grid').jqGrid({
    ...
    search: true,
    postData: {filters: postfilt },
    sortname: postsort,
    sortorder: postsord,
    ...
});

以同样的方式 Id 属性 of jsonReader 将被忽略。您应该改用 id。此外,jqGrid 将 jsonReader(参见 the documentation)的默认属性与包含在网格选项中的值合并。因此,您无需包含 root: 'rows'page: 'page' 等默认属性。 jsonReader 应该看起来像

jsonReader: {
    repeatitems: false,
    id: 'PrimaryKeyId'
}