在传递给Web服务之前,将jqGrid rowNum从ALL更改为-1的最佳方法
我正在寻找允许用户选择在jqGrid中显示所有记录的最佳方法。 我知道为rows参数传递的-1值表示ALL,但我想在rowList select元素中出现单词“ALL”而不是-1,即。 rowList:[15,50,100,’ALL’]。
我将网格请求传递给一个接受“行”的int的Web服务,我正在尝试找到如何以及何时将用户选择的“ALL”值更改为-1,然后再将其发送到网络服务。
下面是我清理过的网格代码。 我在数据类型函数中的$ .ajax之前尝试了一些不同的代码块。 但大多数尝试似乎都是我必须以最可能的方式做到这一点。 例如,
datatype: function(postdata) { if ($("#gridTableAssets").jqGrid('getGridParam', 'rowNum') == 'ALL') { $("#gridTableAssets").appendPostData({ "rows": -1, "page": 1 }); } $.ajax({...
但这样做似乎会导致实际的“页面”GridParam在后续的网格操作中被忽略,迫使我在其他地方处理它。 似乎这是经常在那里做的事情并且有干净的方式做到这一点。
清理网格代码:
$("#gridTableAssets").jqGrid({ datatype: function(postdata) { $.ajax({ url: "/Service/Repository.asmx/GetAssets", data: JSON.stringify(postdata), type: 'POST', contentType: "application/json; charset=utf-8", error: function(XMLHttpRequest, textStatus, errorThrown) { alert('error'); }, success: function(msg) { var assetsGrid = $("#gridTableAssets")[0]; assetsGrid.addJSONData(JSON.parse(msg)); ... } }); }, ... pager: $('#pagerAssets'), rowNum: 15, rowList: [15, 50, 100, 'ALL'], ... onPaging: function(index, colindex, sortorder) { SessionKeepAlive(); } });
这是网络服务
[WebMethod] public string GetAssetsOfAssetStructure(bool _search, int rows, int page, string sidx, string sord, string filters)
首先,我发现你的问题非常好。 当我开始使用jqGrid时,我在rowList中搜索“All”并进行了一些实验,但没有任何成功。 然后我忘记了这个问题。 现在在你的问题之后我想到在我所有的jqGrids中使用这个function。
现在谈谈解决方案。 这很容易,但我建议将datatype
替换为datatype
函数datatype: 'json'
。 您可以使用标准’json’类型在函数内部执行的所有操作。 要将contentType
更改为"application/json; charset=utf-8"
可以使用ajaxGridOptions
选项(有关详细信息,请参阅设置jQuery jqGrid执行的请求的内容类型 )。 可以使用postData
参数替换jQuery.ajax
的data
参数,但只有当你想向服务器发送一些额外的参数时才需要它(如如何使用内置的搜索/filter过滤jqGrid数据中所述盒子 )。 最后,我们收到如下内容:
$("#gridTableAssets").jqGrid({ datatype: 'json', gridview: true, url: '/Service/Repository.asmx/GetAssets', //postData: postdata, // add some additional parameters ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, mtype: 'POST', // ... pager: $('#pagerAssets'), rowNum: 15, rowList: [15, 50, 100, 'ALL'], serializeGridData: function (postData) { if (typeof postData.rows === "string") { // "ALL" postData.rows = 10000; // or -1 if your server } if (isNaN(postData.page)) { // fix NaN in page for rows="ALL" postData.page = 1; } return JSON.stringify(postData); }, // ... });
如果您计划在所有jqGrids中使用serializeGridData
, ajaxGridOptions
和一些其他参数,则可以在$.jgrid.defaults
定义此函数(请参阅设置jQuery jqGrid执行的请求的内容类型 )。