我有一个包含以下过滤字符串的对象:
prefs.filters={"groupOp":"AND","rules":[{"field":"FirstName","op":"cn","data":"max"}]}
这是我的网格创建,我试图在postData设置中应用过滤器:
// Set up the jquery grid
$("#jqGridTable").jqGrid(
{
// Ajax related configurations
url: jqDataUrl,
datatype: "json",
mtype: "GET",
autowidth: true,
// Configure the columns
colModel: columnModels,
// Grid total width and height
height: "100%",
// customize jqgrid post init
gridComplete: function()
{
CRef.updateJqGridPagerIcons("jqGridTable");
},
// Paging
toppager: true,
rowNum: 20,
rowList: [5, 10, 20, 50, 100],
viewrecords: true, // Specify if "total number of records" is displayed
// Default sorting
sortname: typeof prefs.sortCol !== "undefined" ? prefs.sortCol : "LastName",
sortorder: typeof prefs.sortCol !== "undefined" ? prefs.sortOrd : "asc",
sorttype: "text",
sortable: true,
postData: typeof prefs.filters !== "undefined" ? { filters: prefs.filters } : {},
//also tried this...
//postData: typeof prefs.filters !== "undefined" ? { JSON.stringify(filters: prefs.filters) } : {},
//remaining property settings excluded from post to keep short.
更新:在网格上使用.navGrid,如下所示:
.navGrid("#jqGridTable",
{ refresh: true, add: false, edit: false, del: false, refreshtitle: getRefreshText('@Model.Instruction'), searchtitle: searchText },
{}, // settings for edit
{}, // settings for add
{}, // settings for delete
{ closeAfterSearch: true, closeOnEscape: true, multipleSearch: true, multipleGroup: true });
创建网格时,不应用postData中的过滤器。我也尝试在初始创建后触发重载事件,并且也没有应用过滤器。
从其他帖子中,我相信我的路径正确,但似乎缺少了一些东西。
评论后更新:
我将以下代码添加到loadComplete ...
if ($("#jqGridTable").jqGrid("getGridParam", "datatype") === "json") {
setTimeout(function () {
$("#jqGridTable").jqGrid("setGridParam", {
datatype: "local",
postData: { filters: prefs.filters, sord: prefs.sortOrd, sidx: prefs.sortCol },
search: true
});
$("#jqGridTable").trigger("reloadGrid");
}, 50);
}
并成功保留了过滤器。 :)
然而,现在我有一个有趣的问题副作用。我可以对列进行排序,并且某些列将更改为正确排序asc / desc,但是当我转到其他人并进行排序时,它们按照它们最初加载的顺序排序,这既不是asc也不是desc。
答案 0 :(得分:0)
如果您希望应用search: true
,则必须设置jqGrid的filters
选项。此外,您使用datatype: "json"
。这意味着filters
将只发送到服务器,您的服务器代码必须解码过滤器并在那里使用。再说一遍。 postData
的正确值为{ filters: JSON.stringify(prefs.filters) }
。
更新:我建议您升级到最新版本(4.12.1)或free jqGrid。它是我自2014年底开发的jGrid的分支。要使用免费的jqGrid,您只需将jqGrid文件的URL更改为the wiki article中描述的URL即可。之后,您可以使用以下选项:
loadonce: true,
forceClientSorting: true,
search: true,
postData: { filters: prefs.filters },
sortname: prefs.sortCol,
sortorder: prefs.sortOrd
和删除您发布的loadComplete
代码"评论后更新"你问题的一部分。免费jqGrid将加载从服务器返回的所有数据,应用过滤器prefs.filters
本地,对结果本地进行排序并显示结果的第一页(基于页面大小rowNum: 20
)。
The old demo从服务器加载the JSON data,在本地对数据进行排序并按isFinal === 1
过滤,最后显示结果的第一页。该演示使用sortfunc
,additionalProperties
进行额外的自定义排序,允许在本地data
中另外保存属性。
您还可以将reloadGridOptions: { fromServer: true }
添加到您使用的navGrid
的其他选项中refresh: true, add: false, ...
。如果用户单击按钮,它将更改导航栏的“刷新”按钮的行为以从服务器重新加载数据。请参阅我今天发布的another answer,了解有关免费jqGrid和loadonce: true
的新选项的更多信息。