jqGrid滚动bug与大行

时间:2015-03-20 08:49:51

标签: javascript jquery jqgrid infinite-scroll jqgrid-asp.net

Guriddo jqGrid JS版本:4.7.0。

(function ($) {
  'use strict';
  $(function () {
    $('#jqGrid').jqGrid({
      url: '../StrictRoutesRebirth/StrictRoutes/',
      mtype: 'GET',
      datatype: 'json',
      colModel: [{
        label: 'id',
        name: 'id',
        hidden: false,
        key: true
      },
      {
        label: 'Примечание',
        index: 'note',
        name: 'note'
      },
      {
        label: 'Логин',
        index: 'userLogin',
        name: 'userLogin',
        hidden: true,
        edittype: 'text'
      }],
      scroll: 1,
      height: 500,
      width: 500,
      rowNum: 50,
      rownumbers: true,
      pager: '#jqGridPager',
      prmNames: {
        nd: null,
        search: null,
        page: 'page',
        rows: 'pageSize',
        sort: 'sortKey',
        order: 'sortOrder',
        totalrows: 'totalQty'
      },
      jsonReader: {
        root: 'data.entries',
        // page: 'data.pager.page',
        total: 'data.pager.totalPages',
        records: 'data.pager.totalQty'
      }
    });
  });
})(jQuery);

当jqGrid遇到长文本字段(第四个网格以渲染高度很高的行)时,启用scroll: 1 jqGrid变得出现故障并且无法正常工作。附上screencast以显示问题。

1 个答案:

答案 0 :(得分:3)

我在之前的回答中写道,虚拟滚动的当前实现有很多限制。我写道,如果确实需要,我建议不要使用jqGrid的功能。

您在问题中描述的限制非常明确。您可以检查jqGrid代码的the lines,以查看jqGrid获取第一行的outerHeight(请参阅the line)并将其乘以行数(请参阅the linethe line)。然后使用结果计算滚动后应设置的新页面数。

因此,如果一个人对不同的行有不同的高度,那么就不能使用jqGrid的虚拟滚动功能。

当前虚拟滚动的实现还存在很多其他问题。最重要的是限制可以在Internet Explorer中显示的行数。如果您只是在Internet Explorer 中打开the page,您将只看到第一页数据,您将无法看到更多数据,您将看不到显示数据的建议并非全部数据库中存在20行。我发现问题与您描述的问题有很大关系。因此,在大量行的情况下,通常会尝试使用scroll: 1选项,但完全不是这样。有关其他信息,请参阅the answer

如果你仔细检查jqGrid的文档,你会发现很多地方(比如here)jqGrid的某些功能或某些方法不能用于虚拟滚动。因此,如果您使用scroll: 1作为默认功能,那么您将无法使用jqGrid的许多功能。