在传递给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.ajaxdata参数,但只有当你想向服务器发送一些额外的参数时才需要它(如如何使用内置的搜索/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中使用serializeGridDataajaxGridOptions和一些其他参数,则可以在$.jgrid.defaults定义此函数(请参阅设置jQuery jqGrid执行的请求的内容类型 )。