Как показать пейджер, только если в бесплатной jqgrid более одной страницы

используется бесплатный jqgrid с панелью инструментов верхнего уровня:

    $.extend(true, $.jgrid.defaults, {
        mtype: 'POST',
        iconSet: "fontAwesome" ,
        navOptions: {
            position: "center"},
        autoResizing: { compact: true,widthOfVisiblePartOfSortIcon: 13 },
        toppager: true,
        viewrecords: false,
        rowList: [50, 500, 1000],
        rowNum: 50,
...

Кнопки и пейджер находятся в левой части панели инструментов и отображаются как элементы встроенного блока. в центральной части. Левая и правая части панели инструментов верхнего уровня удаляются с использованием кода из ответа в как поместить пейджер в конец верхней части панели инструментов в бесплатной jqgrid

    $("#grid_toppager")
         .find(".ui-pg-button")
         .each(function (i) {
             $(this).attr({
                 tabindex: String(i),
                 role: "button"
             });
         });
    $("#grid_toppager_left").hide();
    $("#grid_toppager_right").hide();
    $("#grid_toppager_center").attr("colspan", "2");
    $("#grid_toppager_center").css({ width: "", "text-align": "left", "white-space": "" });
    $("#grid_toppager_center").find(">.navtable").append(
        $("#grid_toppager_center").find(">table.ui-pg-table")
    );
    $("#grid_toppager_center").find(">.navtable>table.ui-pg-table").css({display: "inline-block"});

    $grid.bind("jqGridAfterGridComplete", function () {
        var p = $(this).jqGrid("getGridParam"), $toppager = $(p.toppager);
        $toppager.find(".navtable").css("width", "");
    });

Один и тот же код используется для редактирования таблиц с разным количеством строк. Как показать пейджер jqgrid на панели инструментов верхнего уровня, только если есть более одной страницы (более 50 строк)?

Многие таблицы содержат мало строк и показывать пейджер необязательно.

Если добавляются новые строки, пейджер должен появляться автоматически или попеременно, пользователь может обновить страницу, чтобы заставить пейджер появиться.

Обновить

Удаленные страничные данные со скоростным поиском используются в соответствии с как получить colmodel и данные по одному запросу и ускорить загрузку jqgrid

Возвращаются только строки pagesize+1. Результат JSON создается в ASP.NET MVC4 без значений записей:

            return new
            {
                total = rowList.Count() < rows ? page : page + 1,    
                page,
                rows = rowList
            };

p.reccount и p.records всегда имеют одинаковые значения, поэтому пейджер никогда не отображается. Как показать пейджер условно в этом случае? Может быть, следует использовать сравнение записи на странице с размером страницы?


person Andrus    schedule 16.03.2015    source источник


Ответы (1)


Если я правильно понимаю проблему, вы можете использовать

loadComplete: function () {
    var p = $(this).jqGrid("getGridParam"),
        $topPagerButtons = $(p.toppager + "_center").find(">.navtable>table.ui-pg-table");
    $topPagerButtons[p.reccount < p.records ? "show" : "hide"]();
}

См. демонстрацию. Вы можете выбрать отображение 20 или более строк на странице в демоверсии, и кнопки с пейджером будут скрыты.

person Oleg    schedule 16.03.2015
comment
Если используются удаленные страничные данные с оптимизированным поиском, p.reccount и p.records имеют одинаковые значения, и пейджер никогда не отображается. Как включить/отключить пейджер в этом случае? Я обновил вопрос. - person Andrus; 16.03.2015
comment
@Andrus: Например, если вы загружаете вторую страницу, то p.reccount должно быть количеством отображаемых строк на странице, а p.records должно быть общее количество записей. Если значения совпадают, у вас есть только одна страница данных, и нет необходимости отображать пейджер. Это было то, что вы спросили. Разве не так? Если вы хотите скрыть только часть элементов пейджера, вы можете сделать то же самое, но выбрать только те элементы, которые хотите скрыть/показать. Если вы возвращаете нестандартную информацию в ответе сервера, используйте критерии проверки, соответствующие данным, которые вы возвращаете. - person Oleg; 16.03.2015
comment
Данные возвращаются, как описано в вашем ответе на вопрос, указанный в обновленной части этого вопроса. Это стандартный способ. Первый запрос на первую страницу возвращает 50 записей, и количество записей также равно 50 записям. Окно alert() показывает, что оба значения равны 50. Поскольку условие 50<50 ложно, пейджер не появляется. На самом деле в таблице огромное количество записей, поэтому должен появиться пейджер. - person Andrus; 16.03.2015
comment
@Andrus: Понятно, что если вы хотите скрыть пейджер на стороне клиента, если возвращаемые данные полные, вы должны вернуть информацию с сервера. Если вы не заполните часть records и вместо этого заполните total, то вы должны проверить, не равно ли total page (вероятно, это означает p.page < p.lastpage) вместо p.reccount < p.records. - person Oleg; 16.03.2015
comment
p.page < p.lastpage вызывает исчезновение пейджера при достижении последней страницы. Возможно, следует использовать p.page>1 || p.page < p.lastpage - person Andrus; 16.03.2015
comment
@Andrus: Если у вас есть работа, может быть легко найти критерии, которые вам нужны. Если вы его не найдете, вам нужно расширить ответ сервера дополнительным свойством: toHidePager, которое вы должны установить. На стороне клиента вы можете увидеть его в loadComplete (data) как data.toHidePager. - person Oleg; 17.03.2015
comment
Вероятно, $topPagerButtons[(p.page>1 || p.page < p.lastpage) ? "show" : "hide"](); решает проблему. Спасибо. - person Andrus; 17.03.2015