如何在jqGrid中显示所有行?

47

jqGrid暴露了一个属性rowNum,您可以设置每页显示的行数。如何将网格设置为仅显示所有行?

目前,我只是将rowNum设置为非常高的值,例如<%= int.MaxValue %>,但我想知道是否有更好的方法。


我们也使用了一个很高的数字。你可以将这个值设为标志,当服务器看到时忽略分页。 - Craig Stuntz
https://dev59.com/o0vSa4cB1Zd3GeqPhtiC - deprecated
15个回答

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

请查看最新的jqGrid文档此处
具体而言:
设置我们想在网格中查看的记录数。将此参数传递给url以供检索数据的服务器例程使用。请注意,如果将此参数设置为10(即检索10条记录),并且您的服务器返回15,则只会加载10条记录。将此参数设置为-1(无限制)以禁用此检查。
更新
不幸的是,这种行为在jqGrid 3.6.3中被破坏了。根据Tony的此帖子
是的,这是真的。原因是新引入的scroll:1。在未来,我们将纠正这种行为。
因此,jqGrid开发人员已经意识到了这个问题,并显然计划在未来的版本中修复它。不幸的是,这篇文章是一年多前的......
此时,我唯一能推荐的就是将rowNum设置为非常大的数字,以模拟-1的行为。
你也可以尝试whatispunk下面的解决方案,使用rowNum:''。但是,我尝试在包含本地数据(loadonce:true)的网格上使用此方法。尝试对行进行排序时,所有网格的本地数据都会消失。因此,这个解决方案似乎不适用于具有本地数据的网格,除非这个缺陷已经在jqGrid的较新版本中得到修复(我在jqGrid 3.8.2上测试了它)。如果您有反馈,请在下面发表评论!
更新 - 2014年4月16日
根据jqGrid团队的说法,这现在已经得到解决:
我已经添加了支持在分页器选择框上设置不同的显示值,包括-1。
我还没有机会测试以确认修复程序。据推测,此更改将在jqGrid 4.6.0之后的下一个版本中。

3
如果设置 rowNum: '',则会获取所有行。 - mikesigs
1
@Justin,这个答案中的删除线很令人困惑,而且你的“有效解决方案”评论被隐藏了。我建议取消删除线! :) - KevinDeus
1
我的回答中被划掉的部分已经不再有效,所以才被划掉。我觉得恢复它可能会更加混乱。我可以直接删除它,但是这样有效的回答就会脱离上下文,因为我需要解释最初如何使用-1来实现这个解决方案。我不知道...也许正确的做法是完全重新按照这些思路来撰写这个回答。 - Justin Ethier
如果有一个记录使用本地数组,且值为-1时,它会出现一个恶性bug,导致网格为空。 - Justin Levene

10

jqgrid(无论是3.5版本还是其他版本)似乎没有一种优雅的内置方法来完成此操作。到目前为止,我找到的最好方法是将以下内容添加到您的网格选项中:

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

其中100000000是一个任意大于你将返回的最大行数的数字,而option[value=]这一行则是为了使你的用户界面看起来更好看一些。有点丑陋,但对我来说有效。


5

这个可以运行:

// 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);
}

4

如果您不想使用分页,那么只需更改您的服务器端代码以返回所有行即可,不要使用rows参数。

如果您想要有rowlist选项,但也想要显示所有选项,则可以在网格属性中执行以下操作:

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

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


有点能用,但是在右下角出现了“查看 NaN - NaN 的 577” - gawpertron

4

对我来说,设置 rowNum:-1 就可以解决问题了。


2
如果您在导航栏上设置了分页,您还可以访问网格右下角显示的总行数,然后将其附加到生成的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));

1
默认情况下,如果您不使用分页,JQ Grid 最多显示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'
        });

1
我已经把这个东西搞定了:

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

这适用于设置为true和false的loadOnce选项。请注意,如果您不设置rowNum选项为0,则默认显示20条记录。 此外,我假定您以文档中记录的JSON读取器格式从服务器返回总行数。

data.total通常是总页数。它是“第x页,共y页”中的y。data.records是返回记录的总数,无论您显示多少条记录。它是“显示x-z条记录,共y条记录”中的y。您应该使用data.records。 - Chris

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

1

设置 rowNum: '' 将获取所有行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接