jqgrid не может прочитать свойство ‘строки’ неопределенного

#javascript #jquery #jqgrid #mcustomscrollbar

#javascript #jquery #jqgrid #mcustomscrollbar

Вопрос:

Я пытаюсь добавить пользовательскую полосу прокрутки в свою jqgrid таблицу с помощью метода loadComplete, например: $(".ui-jqgrid-bdiv").mCustomScrollbar();

Для меня это работает просто отлично, но в случае с замороженными столбцами я получаю эту ошибку: Cannot read property 'rows' of undefined

Может быть, кто-нибудь может помочь мне с этой проблемой? Спасибо

Вот мой код:

 const colModel = [
    {
        name: "select",
        width: 35,
        frozen: true,
    },
    {
        name: "name",
        width: 80,
        label: "NAME",
        fixed: true,
        frozen: true,
    },
    {
        name: "date_saved",
        width: 130,
        label: "DATE SAVED"
    },
    {
        name: "company",
        width: 130,
        label: "COMPANY"
    },
];

export const refreshSavedContacts = () => 
    $.getJSON('/endpoint')
        .success(({ data }) => $("#jqGrid").jqGrid('clearGridData').jqGrid('setGridParam', { data }).trigger('reloadGrid'))
        .error((error) => console.error("error: "   error));

export const savedContacts = () => {
    $("#jqGrid").jqGrid({
        autoencode: false,
        colModel,
        sortIconsBeforeText: true,
        viewsortcols: [true, "vertical", true],
        autowidth: true,
        shrinkToFit: false,
        cmTemplate: { editable: true, autoResizable: true },
        iconSet: "jQueryUI",
        autoResizing: { compact: true },
        inlineEditing: { keys: true, position: "afterSelected" },
        sortname: "invdate",
        sortorder: "desc",
        height: 230,
        multiselect: true,
        multiselectPosition: "none",
        loadComplete: () => $(".ui-jqgrid-bdiv").mCustomScrollbar(),
    })
    $("#jqGrid").jqGrid('setFrozenColumns');
}
 

Комментарии:

1. Какая версия jqGrid используется?

2. 4.15.5 на самом деле, эту проблему я только что решил, установив этот $(«.ui-jqgrid-bdiv»). mCustomScrollbar() с данными, а затем запустить перезагрузку сетки. Спасибо

3. но я получаю новую проблему — асинхронную прокрутку замороженных и не замороженных таблиц

Ответ №1:

Вы используете не поддерживаемую версию jqGrid — free-jqGrid, я предлагаю вам переключиться на поддерживаемую версию Guriddo jqGrid.

Использование пользовательской полосы прокрутки с замороженными столбцами требует перезаписи функции прокрутки сетки. Я не уверен, изменен ли исходный код прокрутки в free-jqGrid, но вы должны посмотреть на функцию scrollGrid.

На самом деле вы должны прокручивать замороженный div, когда прокручивается основной div. В Guriddo jqGrid это выглядит так (в функции scrollGrid).

 if(p.frozenColumns) {
    $(grid.fbDiv).scrollTop( grid.bDiv.scrollTop );
}
 

Кроме того, вы должны посмотреть на метод setFrozenColumns, чтобы изменить код при действии горизонтальной прокрутки.

Другими словами, это не тривиальная задача.