关于postData参数包括函数和trigger('reloadGrid'),你的问题可以很容易地解决。我试着更详细地解释这个想法。
让我们使用mtype: "GET"。标准搜索/过滤框在显示界面后唯一要做的就是将一些附加参数附加到 url,发送到服务器并重新加载网格数据。如果您有自己的搜索/过滤界面(例如,一些选择控件或复选框),您应该自己附加您的 url 并根据trigger('reloadGrid') 重新加载网格。要重置网格中的信息,您可以选择任何您喜欢的方式。例如,您可以在选择控件中包含“不过滤”之类的选项。
更准确地说,您的代码应该类似于答案 how to reload jqgrid in asp.net mvc when i change dropdownlist 中的代码:
var myGrid = jQuery("#list").jqGrid({
url: gridDataUrl,
postData: {
StateId: function() { return jQuery("#StateId option:selected").val(); },
CityId: function() { return jQuery("#CityId option:selected").val(); },
hospname: function() { return jQuery("#HospitalName").val(); }
}
// ...
});
//
var myReload = function() {
myGrid.trigger('reloadGrid');
};
var keyupHandler = function (e,refreshFunction,obj) {
var keyCode = e.keyCode || e.which;
if (keyCode === 33 /*page up*/|| keyCode === 34 /*page down*/||
keyCode === 35 /*end*/|| keyCode === 36 /*home*/||
keyCode === 38 /*up arrow*/|| keyCode === 40 /*down arrow*/) {
if (typeof refreshFunction === "function") {
refreshFunction(obj);
}
}
};
// ...
$("#StateId").change(myReload).keyup(function (e) {
keyupHandler(e,myReload,this);
});
$("#CityId").change(myReload).keyup(function (e) {
keyupHandler(e,myReload,this);
});
如果用户在id=StateId 或另一个带有id=CityId(鼠标或键盘)的选择框中更改选择的选项,函数myReload 将被调用,它只是强制重新加载jqGrid 中的数据。在 jqGrid 为我们执行相应的$.ajax 请求期间,来自postData 参数的值将作为data 参数转发给$.ajax。如果data 的一些属性是函数,这些函数将被$.ajax 调用。因此,将加载来自选择框的实际数据,并将所有数据附加到发送到服务器的数据中。您只需要在您的服务器部分实现读取此参数。
因此来自postData 参数的数据将附加到url(符号'?' 和'&' 将自动添加,并且所有特殊符号(如空格)也将照常编码)。使用postData的好处是:
-
postData 参数中的函数用法允许您从所有使用过的控件加载实际值到重新加载的时刻;
- 您的代码保持结构非常清晰。
- 不仅适用于 HTTP GET 请求,也适用于 HTTP POST;
如果您在选择框StateId 中使用一些“无过滤”或“全部”条目,您可以修改计算StateId 参数值的函数,该参数应附加到服务器url
StateId: function() { return jQuery("#StateId option:selected").val(); }
类似于以下内容:
StateId: function() {
var val = jQuery("#StateId option:selected").val();
return val === "all"? "": val;
}
在服务器端,如果您收到一个空值作为参数,则不应过滤 StateId。
您可以选择使用myGrid.setCaption('A text'); 更改网格标题。这让用户可以更清楚地看到,网格中的数据是用一些标准过滤的。