jq网格 - 垂直滚动条不显示



我正在研究jquery jqgrid插件。在此网格中,我有 1,000,000 条带有scroll: 1选项的记录。而且我的网格中也有rowNum: 10选项。但是网格和垂直滚动条中显示的前 10 行仅丢失。在标题中,我有"显示 1,000,000 中的 1-10"字符串。这意味着总数计算是正确的,但我不知道为什么缺少滚动条。谁能帮我解决这个问题?

编辑:我的jqGrid版本是:4.6.0。这是我的javascript代码:

 $(document).ready(function() {
            var colModel = [
                {name: "id", width: 200, align: "center", searchoptions: {clearSearch: false}, hidden: true, hiddenlg: true},
                {name: "ordernumber", width: 200, align: "center", searchoptions: {clearSearch: false}},
                {name: "customer.fname", width: 200, align: "center", searchoptions: {clearSearch: false}},
                {name: "customer.lname", width: 200, align: "center", searchoptions: {clearSearch: false}},
            ];
            $("#list").jqGrid({
                url: "/orders/listGrid",
                datatype: "json",
                mtype: "POST",
                colNames: ["", "1", "2", "3"],
                colModel: colModel,
                pager: "#pager",
                rowNum: 10,
                rowList: [10, 20, 30],
                viewrecords: true,
                multiSort: false,
                gridview: true,
                autoencode: true,
                shrinkToFit: false,
                autowidth: true,
                scroll: 1,
                direction: "rtl",
                height: 230,
                caption: "Test",
                hidegrid: false,
                ajaxGridOptions: {
                    contentType: "application/json; charset=utf-8"
                },
                serializeGridData: function(data) {
                    return JSON.stringify(data);
                },
            });
        });

这是我的 html 代码:

<table id="list"></table>
<div id="pager"></div>

存在此问题可能是因为您使用了非常多的行,并且虚拟滚动的当前实现不允许显示如此多的行。最大行数的确切限制取决于您使用的 Web 浏览器。看看我几年前发布的错误报告。另请参阅帖子。

jqGrid 在网格之外使用div,并尝试将其高度设置为 parseInt(ts.p.records,10) * rowHeight 的值(见行),其中 rowHeight 为 23px。因此,jqGrid 将尝试将height设置为23000000px,但它不会更改height值,并且不会看到垂直滚动条。

可以尝试制作一些技巧,例如代码的使用

jsonReader: {
    records: function (obj) {
        // return not so large value of records
        return Math.min(66692, obj.records);
    }
},
loadComplete: function (data) {
    var $self = $(this), p = $self.jqGrid("getGridParam"),
        numberFormat = $.fmatter.util.NumberFormat || $.fmatter.NumberFormat,
        fmt = $.jgrid.formatter.integer || {},
        from = numberFormat(parseInt(p.page,10), fmt),
        to = numberFormat((parseInt(p.page,10)-1)*parseInt(p.rowNum,10) + p.reccount, fmt),
        total = numberFormat(parseInt(data.records,10), fmt); // use correct value
    // fix the displayed row numbers
    $(".ui-paging-info", p.pager)
        .html($.jgrid.format(p.recordtext, from, to, total));
}

请参阅演示。但是这样的技巧将只允许显示网格的一些第一页。使jqGrid真正能够在虚拟滚动(scroll: 1)的情况下显示大量行,需要重写jqGrid代码的某些部分。

我建议您最好使用标准分页而不是虚拟滚动。使用必须使用寻呼机的第一个/上一个/下一个/最后一个按钮,但大多数需要检查 1,000,000 行数据的用户都可以执行此操作。

为了告诉信任,没有人会滚动超过 1,000,000 行。取而代之的是,需要提供良好的过滤/搜索可能性。例如,使用过滤器工具栏和高级搜索。设置相应的过滤器后,过滤后的数据可以在 1 到 10 页中显示,并且显示这些数据可能非常有趣。

最新更新