我正在使用 jqGrid,如果用户执行了一些搜索并且网格根据搜索条件显示记录,我需要保存其特定状态。当用户执行搜索并单击编辑按钮来编辑记录时,我需要在根据搜索条件显示的记录的最后左侧状态中显示网格。刚刚浏览了奥列格的几个答案,但仍然无法让我的东西正常工作。我的 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 等。注意变量名称 postfilt 、后排序和后排序。我只是根据我的要求为这些变量分配值:当我的网格第一次加载时,过滤器是空白的,以便加载带有所有数据的网格,并使用我拥有的后数据过滤器值分配这些变量当用户应用某些过滤器时提前保存。我面临的问题是,我的这种动态过滤器类型的功能对于我实现它的第一个网格来说工作得很好。但它不适用于我尝试实现它的其他网格。(当然,不同的网格搜索过滤器是为不同的网格保存的)。我在 Chrome 的 F12 中调试时检查过,我的过滤器变量确实显示了为 jqGrids postData 过滤器提供的正确值,但它仍然每次都会加载 jqGrid 的所有数据,而不是在需要时加载过滤器。我多次尝试在加载网格后调用 gridComplete 或 loadComplete 中的函数来提供后数据过滤器,但在使用最后提供的搜索条件填充我的 jqGrid 时仍然不成功第一次加载时。我在为 jqgrid 提供标准以便在第一次加载时将其加载到最后一个左侧状态时错在哪里?如有任何帮助,我们将不胜感激。
编辑:我保存的 jqGrid 后数据搜索过滤器之一如下:
{"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,
...
});
同样,jsonReader
的 Id
属性将被忽略。您应该使用 id
来代替。此外,jqGrid 将 jsonReader 的默认属性(请参阅 the documentation )与网格选项中包含的值合并。因此,您不需要包含 root: 'rows'
、page: 'page'
等默认属性。 jsonReader
应该看起来像
jsonReader: {
repeatitems: false,
id: 'PrimaryKeyId'
}
关于javascript - 无法在加载期间在 jqGrid 上分配预过滤器以保存其状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675745/