установка данных jqGrid после создания сетки

Следующий пример кода загрузит jqGrid (этот код работает)...

jQuery(document).ready(function () {
    var gridData = [
                { col1: 'cell11', col2: 'cell12', col3: 'cell13' },
                { col1: 'cell21', col2: 'cell22', col3: 'cell23' }
                ];
    $('#myGrid').jqGrid({
        data: gridData,
        datatype: 'clientSide',
        colNames: ['Col1', 'Col2', 'Col3'],
        colModel: [
                        { name: 'col1' },
                        { name: 'col2' },
                        { name: 'col3' }
                        ]
    })

Как мне переписать пример, чтобы gridData устанавливался после создания jqGrid? Я пробовал это...

jQuery(document).ready(function () {
    var gridData = [
                { col1: 'cell11', col2: 'cell12', col3: 'cell13' },
                { col1: 'cell21', col2: 'cell22', col3: 'cell23' }
                ];
    $('#myGrid').jqGrid({
        datatype: 'clientSide',
        colNames: ['Col1', 'Col2', 'Col3'],
        colModel: [
                        { name: 'col1' },
                        { name: 'col2' },
                        { name: 'col3' }
                        ]
    })


    $('#myGrid')[0].data = gridData;

Однако приведенный выше код не работает. Может кто-нибудь показать мне, как, пожалуйста?

ОБНОВЛЕНИЕ: я также пробовал это для моей последней строки, но это тоже не сработало...

    $('#jqgrid-panel-contents').jqGrid('setGridParam', {data: gridData});

person John Livermore    schedule 23.02.2011    source источник


Ответы (3)


Может быть, попробовать перезагрузить сетку после этого?

 $('#jqgrid-panel-contents').jqGrid('setGridParam', {data: gridData}).trigger('reloadGrid');
person Ewan Heming    schedule 23.02.2011
comment
Да, я только что понял это и вернулся, чтобы ответить на свой вопрос и нашел ваш. Спасибо! - person John Livermore; 24.02.2011
comment
@John: я не уверен в последней версии, но, вероятно, нужно вызвать refreshIndex после обновления параметра data (см. stackoverflow.com/questions/3414774/). Может случиться так, что relodGrid уже сделает всю работу. Кроме того, вы должны включить в элементы массива gridData свойство id или использовать localReader, чтобы определить, какой столбец сетки можно интерпретировать как идентификатор. Например localReader: {id:'col1'} - person Oleg; 24.02.2011
comment
это решение не работает, когда сетка загружается с разными данными на одной странице n раз. Старые данные остаются, а новые добавляются к ним. Поскольку setGridParam использует jquery.extend для внутреннего использования.Нажмите, чтобы увидеть больше - person Infant Dev; 08.03.2013

@infantDev Если бы я хорошо понял, что вы пытались сказать: я думаю, вам нужно сделать GridUnload

$("#jqgrid-panel-contents").jqGrid('GridUnload');

перед добавлением новых данных

person yngrdyn    schedule 15.09.2014

Решение от Юэна Хеминга (выше) не будет работать с Бесплатный JQGrid (по крайней мере, с версией 4.15.2), когда в сетку загружены данные, и вы хотите изменить данные.

однако следующее, что было предложено Олегом (я не помню, где), будет работать, и оно также установит ваш пейджер сетки на 1, если в ваших новых данных не так много страниц.

var gParams = $('#myGrid').jqGrid("getGridParam");
gParams.data = data;
$('#myGrid').trigger("reloadGrid", [{page: 1}]);
person AaA    schedule 29.01.2020