как изменить значения в пейджере jqgrid

Старший разработчик. Я новый разработчик, и я не уверен в jqgrid.

Спасибо большое за помощь. Меня беспокоит ухудшение производительности при запросе больших объемов данных в jqgrid. Таким образом, мы извлекаем данные из БД только в объеме, равном значению поля выбора rowNum, и общему количеству данных вместе с числом.

Я хочу изменить значения пейджера в соответствии с данными ответа после запроса условия. (значение пейджера jqgrid - всего, записей...).

Структура объекта ответа сервера

data: {
page: {
totalRowCount,
currentPage,
displayRowCount,
totalPage
},
fileInfoDtoList
}

Вот и все.

Размеры totalRowCount и fileInfoDtoList не совпадают.

fileInfoDtoList содержит только данные, показанные в таблице текущей страницы.

totalRowCount — это общее количество данных, которые будут созданы в фактическом запросе условия.

Я попытался изменить lastpage, records, total с помощью setGridParam, а также изменил внутреннее значение, назначив jsonReader переменной с помощью getGridParam, но фактическое значение pagerUI не изменилось.

fileDataGrid.jqGrid({
                url: setUrl(),
                mtype: "GET",
                datatype: "json",
                colModel: [
                    {
                        label: 'date', name: 'baseDate',
                        formatter: function (cellValue, options, rowdata) {
                            let fixedValue = cellValue.substr(0, 4) + "-" +
                                cellValue.substr(4, 2) + "-" +
                                cellValue.substr(6, 2);
                            return $.fn.fmatter.call(this, "date", fixedValue, options, rowdata);
                        },
                        formatoptions: {
                            newformat: "Y-m-d"
                        }
                        , align: 'center'
                    },
                    {label: 'aa', name: 'diseaseName', align: 'right'},
                    {label: 'bb', name: 'fileName', align: 'right'},
                    {label: 'cc', name: 'fileSize', align: 'right'},
                    {label: 'dd', name: 'fileStateName', align: 'center'},
                ],
                jsonReader: {
                    records: 'page.totalRowCount',
                    total:'page.totalPage',
                    root: 'fileInfoDtoList',
                    page: 'page.currentPage',
                    repeatitems: false
                },
                rowNum: 10, 
                viewrecords: true,
                rownumbers: true,
                emptyrecords: 'No Datas',
                loadonce: false,
                sortable: 'true',
                pager: '#pager',
                rowList: [10, 20, 30],



//paging event area
                onPaging: function (pgButton) {
                    console.log(pgButton);

                    setTimeout(function () {
                        $.ajax({
                            url: setUrl(),
                            method: 'get',
                            success: function (data) {
                                console.log(data);
                                let rowNum = $("#fileDataCollectJqGrid").getGridParam('rowNum');
                                let currentPage = $("#fileDataCollectJqGrid").getGridParam('page');
                                let lastPage = $("#fileDataCollectJqGrid").getGridParam('lastpage');
                                let totalrows = $("#fileDataCollectJqGrid").getGridParam('totalrows');

                                console.log(" rowNum : " + rowNum + " currentPage : " + currentPage + " lastPage : " + lastPage + " totalrows : " + totalrows );
                                fileDataGrid.jqGrid('clearGridData');
                                let jsonReader = fileDataGrid.jqGrid('getGridParam', 'jsonReader');
                                console.log(jsonReader);
                                jsonReader.total = 999;
                                console.log(fileDataGrid.jqGrid('getGridParam', 'jsonReader'));
                                fileDataGrid.jqGrid("setGridParam", {
                                    datatype: "local",
                                    data: data.fileInfoDtoList,
                                    lastpage: data.page.totalPage,
                                    records: data.page.totalRowCount,
                                });
                                fileDataGrid.trigger('reloadGrid');
                            }
                        })
                    }, 0);
                }
            });

область события кнопки

 $("#searchButton").click(function () {
                $.ajax({
                    url: setUrl(),
                    method: "get",
                    success: function (data) {
                        console.log(setUrl());
                        console.log(data);
                        let $fileDataCollectJqGrid = $('#fileDataCollectJqGrid');
                        $fileDataCollectJqGrid.jqGrid('clearGridData');
                        $fileDataCollectJqGrid.jqGrid("setGridParam", {
                            datatype: "local",
                            data: data.fileInfoDtoList,
                            totalRows: data.page.totalPage,
                        });
                        $fileDataCollectJqGrid.trigger('reloadGrid');
                    }
                });
            });

Изначально, когда я устанавливаю jqgrid, он знает, что значение пейджера устанавливается в соответствии со значением настройки jsonReader. Я попытался установить значение пейджера после запроса условия, но значение не изменилось в части pagerUI.

И я попытался изменить общее количество (общее количество страниц) и записи (общее количество строк) пейджера с помощью setGridParam, но я изменил lastpage, totalrows и так далее. Однако общее количество строк изменилось на размер списка.

fileDataGrid.jqGrid("setGridParam", {
                                    datatype: "local",
                                    data: data.fileInfoDtoList, <<--changed total (total Page Count) value of pager as this size of list. 
                                    lastpage: data.page.totalPage,
                                    records: data.page.totalRowCount,
                                });

введите здесь описание изображения


person Jays    schedule 10.06.2019    source источник
comment
Какая версия jqGrid используется? Какие именно параметры вы хотите изменить в пейджере?   -  person Tony Tomov    schedule 10.06.2019
comment
@TonyTomov привет, Тони Томов, я использую jqgrid версии 4.4.3, я хочу изменить общее количество и записи, используемые в качестве свойств jsonReader. На приведенном выше изображении я хочу изменить [Страница 1 из 1] и [Просмотр 1-20 из 20] на любое значение, которое я укажу, независимо от размера массива данных. Является ли это возможным?   -  person Jays    schedule 11.06.2019
comment
jqGrid версии 4.4.3 очень старый и больше не поддерживается. Вы можете переключиться на поддерживаемую коммерческую версию Guriddo jqGrid. Вероятно, вы можете изменить их с помощью события beforeProcessing, но я не уверен, доступно ли это событие в этом выпуске. Проверить документы   -  person Tony Tomov    schedule 11.06.2019
comment
@TonyTomov вы разработчик jqGrid?   -  person Jays    schedule 11.06.2019
comment
@TonyTomov спасибо за ответ, я сам решил проблему. я использовал postData, когда я вызываю функцию запроса данных,   -  person Jays    schedule 14.06.2019


Ответы (1)


я решил проблему сам! только что установил данные публикации как setGridParam, когда я вызываю метод запроса данных. я уже установил данные пейджера в jsonReader. чтобы я мог решить свою проблему.

 $('#fileDataCollectJqGrid').jqGrid('setGridParam', {
                postData: {
                    collectId: "${collectId}",
                    baseDate: $('#dateInput').val(),
                    diseaseCode: $('#diseaseSelect').val(),
                    fileName: $('#fileNameInput').val(),
                    stateCode: $('#collectionStatus').val()
                },
            }).trigger('reloadGrid');
person Jays    schedule 14.06.2019