jqGrid Обновление локальных данных (объект JSON) - PullRequest
23 голосов
/ 05 июня 2010

Я пытаюсь использовать jqGrid с локальными данными, и я нахожу пару проблем:

Я инициализирую примерно так:

function refreshGrid($grid, results)
{
    $grid.jqGrid({
  data: results,
        datatype: "local",
        colNames:['#','File', 'Category', 'Line Number', 'Message Text','Detailed'],
        colModel:[
            {name:'count',index:'count', width:100, resizable: true},
            {name:'basename',index:'basename', width:100, resizable: true, classes:['basename']},
            {name:'category',index:'category', width:60, resizable: true},
            {name:'linenumber',index:'linenumber', width:60, resizable: true},
            {name:'text',index:'text',width:400, resizable: true},
            {name:'detailed',index:'detailed',width:100,classes:['detailed'], resizable: true }
            ],
        viewrecords: true,
     rowNum:100,
     rowList:[100,200],
     pager: '#debug_errors_pager',
     caption:"JSON Example"
 });
}

Данные, которые яresults является массивом объектов.

Проблемы:

1) Пейджер полностью выключен.Он показывает правильный счет, но на самом деле он не позволяет мне пролистывать данные.

2) Я не могу обновить данные.Я использую свою собственную функцию поиска, чтобы добраться до моего results.Я не могу понять, как обновить существующие данные.Сетка инициализируется в первый раз.При последующих попытках он инициализируется пустой таблицей.

3) Я пробовал что-то вроде:

$grid.empty() - не работает, потому что объект $ grid декорирован jqgrid.Я пытаюсь «обнулить» старую сетку и просто перерисовать ее как обходной путь.`$ grid.trigger ('reloadGrid') - не работает, не знаю почему.

Примечание: это использует jQGrid 3.7.

Ответы [ 6 ]

31 голосов
/ 11 марта 2011

Вы можете использовать простые:

jQuery("#list")
    .jqGrid('setGridParam',
        { 
            datatype: 'local',
            data:mydata
        })
    .trigger("reloadGrid");
23 голосов
/ 27 сентября 2011

Мне удалось добиться чего-то подобного. Уловка для моей проблемы состояла в том, чтобы очистить данные перед обновлением параметра сетки данных. Предполагая, что ваша сетка инициализирована в другом месте (с типом данных: 'local'), попробуйте:

function refreshGrid($grid, results) {
    $grid.jqGrid('clearGridData')
        .jqGrid('setGridParam', { data: results })
        .trigger('reloadGrid', [{ page: 1}]);
}
7 голосов
/ 10 июня 2010

вопрос 1:

Если мы определили пейджер для сетки с данными на стороне клиента, кнопки в пейджере автоматически отключаются. Другими словами, текущий выпуск сетки делает не поддерживает подкачку и поиск на стороне клиента.

локальные данные

Вопрос 2: Вы пробовали:

 $("#list").GridUnload();

см. здесь для различий между gridUnload() и trigger('reloadGrid').

6 голосов
/ 04 марта 2011

Я не нашел хорошего документированного способа обновления локальных данных jqGrid, вот как я расширил jqGrid для решения моей проблемы:

$.extend($.fn.jqGrid, { setData: function(data) {
    this[0].p.data = data;
    return true;
} } );

После этого вы можете сделать следующее, чтобы обновить jqGrid новыми данными:

предположим, ваша сетка была объявлена ​​так:

    jQuery("#list").jqGrid({ datatype: "local", ... other params ... });

тогда вы можете сделать:

jQuery("#list").jqGrid('setData', array_with_new_data);
jQuery("#list").trigger("reloadGrid");

P.S. см. ссылку для получения всех данных из сетки Извлечение содержимого сетки

5 голосов
/ 13 апреля 2011

При обновлении данных в существующей сетке у меня работает следующее:

var gridData = [...];

var grid = jQuery('#gridId');
grid.jqGrid('clearGridData');
if( grid.get(0).p.treeGrid ) {
    grid.get(0).addJSONData({
        total: 1,
        page: 1,
        records: gridData.length,
        rows: gridData
    });
}
else {
    grid.jqGrid('setGridParam', {
        datatype: 'local',
        data: gridData,
        rowNum: gridData.length
    });
}
grid.trigger('reloadGrid');

Я должен был сделать это так, потому что reloadGrid () вызывает populate (), populate (), вызывает addLocalData () и передает возвращаемое значение в addJSONData (), но для treeGrid == true addLocalData () ничего не возвращает addJSONData () впоследствии ничего не делает.

0 голосов
/ 10 июля 2018

Если вы используете локальные данные, вы должны указать свои локальные json данные в jqGrid setGridParam свойство

 jQuery("#list")
        .jqGrid('setGridParam', {
        datatype: 'local',
        data:results //json object
    });

Чтобы перезагрузить jqgrid, вы можете использовать следующее.

 jQuery("#list").trigger("reloadGrid");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...