如何显示jqGrid中的所有行?

jqGrid公开了一个属性rowNum ,您可以在其中设置要为每个页面显示的行数。 你如何设置网格只显示所有行?

现在我只是将rowNum设置为像<%= int.MaxValue %>这样的高度值,但是我想知道是否有更好的方法。

在最新版本的jqGrid中,可以将rowNum设置为-1来指示网格始终显示所有行:

 rowNum: -1 

在这里查看最新的jqGrid文档。

特别:

设置我们要在网格中查看的logging数量。 这个参数被传递给URL以供服务器例程检索数据使用。 请注意,如果您将此参数设置为10(即检索10条logging),并且您的服务器返回15,则只会加载10条logging。 将此参数设置为-1(无限制)以禁用此检查。


更新

不幸的是,这个行为在jqGrid 3.6.3中被破坏了。 根据Tony的这个post :

是的,这是真的。 原因是新介绍的卷轴:1。 将来我们会纠正这种行为。

所以jqGrid的开发者已经意识到了这个问题,显然正在计划在未来的版本中修复它。 不幸的是,这个post是一年多以前

在这个时候,我可以推荐的是,您将rowNum设置为一个非常大的数字来模拟-1的行为。


你也可以尝试下面的使用rowNum: '' whatispunk的解决scheme。 不过,我试图在包含本地数据的网格上( loadonce: true )。 当试图对行进行sorting时,网格的所有本地数据都将消失。 所以这个解决scheme似乎不适用于本地数据的网格,除非这个缺陷已经在更高版本的jqGrid(我在jqGrid 3.8.2上testing过)中解决了。 如果您有任何意见,请在下面发表评论!


更新 – 2014年4月16日

根据jqGrid团队 ,现在已经修复:

我已经添加了支持,在页面select框上设置不同的显示值,包括-1。

尽pipe如此,我还没有机会testing以确认修复。 据推测,这个变化将在jqGrid 4.6.0之后的下一个版本中。

jqgrid(3.5反正)似乎没有一个优雅的方式来做到这一点。 到目前为止,我发现的最好的方法是在网格选项中添加如下内容:

 rowList:[10,20,30,100000000], loadComplete: function() { $("option[value=100000000]").text('All'); }, 

如果100000000的数字比任何时候返回的最大行数高出任意一个,并且选项[value =]是这样的话,那么你的用户界面看起来会更好一些。 Jenky,但为我工作。

如果你不想使用分页,那么改变你的服务器端代码来简单的返回所有的行。 根本不要使用rows参数。

如果你想有行列表,但也有一个选项来显示所有,然后在网格属性中做这样的事情

 jQuery("#statement_mods").jqGrid({ rowList:['ALL',30,50,100,200] }); 

然后在服务器端代码中确保如果GET ['rows'] ='ALL',则忽略rows参数

这工作:

 // Step1 - defines the rows jqGridOptions.rowList =[10, 50, 100, 500, 'All']; ... ... // Step2 - Change the 'All' to a meaningful value loadComplete: function (data) { $(".ui-pg-selbox option[value='All']").val(1000); } 

如果您在导航栏上设置了分页,则还可以访问网格右下angular写入的总行数,然后附加到生成的RowList选项。

做类似的事情:

  // Get the total number of rows and delete space between numbers (Split the content of the div depending of the language (for me french) var val=jQuery("#pager_right div").text().split('sur')[jQuery("#pager_right div").text().split('sur').length-1].split(' ').join(''); // And do the appending if the option isn't already added if(!$(".ui-pg-selbox option[value='"+val+"']").length > 0) jQuery(".ui-pg-selbox").append($('<option></option>').val(val).html(val)); 

设置rowNum:-1为我做了诡计

 Jqgrid.PagerSettings.PageSize = Max Row you want to display; Jqgrid.ToolBarSettings.ToolBarPosition = ToolBarPosition.Hidden; 

我有这个工作:

 $('#bla').jqGrid({ ... 'rowNum' : 0, 'loadOnce' : true, 'loadComplete': function(data) { $(this).jqGrid('setGridParam', 'rowNum', data.total); }, ... }); 

这可以在没有将loadOnce选项设置为true的情况下使用。 请注意,您必须首先将rowNum选项设置为0,如果省略此选项,它仍将默认为要显示的20条logging。 此外,我假设你从logging的JSON阅读器格式从服务器返回的总行数。

用简单的改变解决了它:rowNum:inputDataArray.length

其中inputDataArray是我提供给网格的数组。

您也可以进入jquery.jqGrid.js并将“rowNum:20”更改为“rowNum:Some-Real-Large-Number”。 当你定义你的jqGrid时,不要指定rowNum。 然后将你的整个数据集返回给jqGrid。

设置rowNum:'你得到所有的行。

即使它仍然出现在文档中,您不能像jqGrid 4.5.4那样将rowNum设置为-1,它可以再次运行(也可能在早期的版本中)。

默认情况下,如果您使用的是不使用分页的JQ网格,则显示最多20行:

 // To over come with this problem ,you can just write the bold mark (rowNum:10000,): $("#MasterDataDefinationGrid").jqGrid({ url: 'FetchData.aspx/GetDataFromDB', datatype: 'json', mtype: 'POST', height: 300, autowidth: true, serializeGridData: function (postData) { return JSON.stringify(postData); }, ajaxGridOptions: { contentType: "application/json" }, loadonce: true, colNames: [Your column names], colModel: [Your model], formatter: 'actions', pager: '#MasterDataDefinationPager', pgbuttons: false,pgtext:false, multiselect: false, ignoreCase: true, **rowNum: 10000,** loadtext: 'Loading ...', gridview: true, hidegrid: false, jsonReader: { page: function (obj) { return 1; }, total: function (obj) { return 1; }, records: function (obj) { return obj.d.length; }, root: function (obj) { return obj.d; }, repeatitems: false, id: "0" }, caption: 'Data' });