0

我正在使用 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 等。注意变量名称postfiltpostordpostsort. 我只是根据我的要求为这些变量分配值:当我的网格第一次加载时,过滤器是空白的,以便将所有数据加载到网格中,并为这些变量分配我拥有的 postdata 过滤器值当用户应用某些过滤器时较早保存。我面临的问题是,我的这种动态过滤器类型的功能适用于我实现它的第一个网格。但它不适用于我试图实现它的其他网格。(当然,不同的网格搜索过滤器是为不同的网格保存的)。我在 Chrome 的 F12 中调试时检查了我的过滤器变量确实显示了要为 jqGrids postData 过滤器提供的正确值,但它仍然每次都将所有数据加载到 jqGrid 中,而不是在需要时加载过滤器。gridCompleteloadComplete用于在加载我的网格后提供 postdata 过滤器,但在第一次加载时使用最后提供的搜索条件填充我的 jqGrid 时仍然不成功。我在为 jqgrid 提供标准以便在第一次加载时将其加载到最后一个左侧状态时哪里错了?任何帮助表示赞赏。

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

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

1 回答 1

1

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

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

同样,Id属性 ofjsonReader将被忽略。你应该id改用。此外,jqGrid 将jsonReader(参见文档)的默认属性与网格选项中包含的值合并。因此,您不需要包含默认属性,例如root: 'rows',page: 'page'和其他。jsonReader应该看起来像

jsonReader: {
    repeatitems: false,
    id: 'PrimaryKeyId'
}
于 2015-04-21T08:04:02.267 回答