2010-07-27 7 views
1

У меня есть управляемая jqgrid на стороне клиента, которую я перезагружаю при запуске какого-либо внешнего события. Все нормально, когда я перезаряжаю сетку большим количеством данных, но когда я перезагружаю ее с меньшим количеством данных, количество строк неверно.jqgrid reload grid частично работает

Например, если в настоящее время 100 строк в сетке и я перезагружаю его на 200, тогда на панели навигации отображается 200 записей. Если есть 200 строк в нем, и я обновить его с 25 строками, она до сих пор показывает 200 в навигационной панели вместо 25. Код, который обновляет сетку выглядит следующим образом:

$("#list2").trigger("GridUnload");    
$.ajax({ 
    url: 'http://xxx, 
    dataType: 'json', 
    async: false, 
    success: function(data) { 
       gridData = data; 
      } 

});

$("#list2").setGridParam({ data: gridData }); 
    $("#list2").trigger("reloadGrid"); 

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

Благодаря

ответ

4

Попробуйте заменить

$("#list2")[0].refreshIndex(); 
$("#list2").trigger("reloadGrid"); 

с

var g = $("#list2"); 
g.setGridParam({ data: gridData }); 
g[0].refreshIndex(); 
g.trigger("reloadGrid"); 

см http://www.trirand.com/blog/?page_id=393/help/losing-edited-cell-data-after-paging/ и http://www.trirand.com/blog/?page_id=393/bugs/data-parameter-are-not-modified-during-inline-editing/ для деталей.

В общем, вы должны использовать, вероятно, лучше установить url параметр с относительно setGridParam методов или просто использовать postData с функцией (см How to filter the jqGrid data NOT using the built in search/filter box подробности)

3

Я решил эту проблему с помощью этого кода, но в моем случае вопрос был бит, отличающийся тем, что недавно добавленные строки не показывались в JQGrid. Так что этот код получает обновленные данные для сетки, а затем сохранить его в локальном объекте, а затем передать этот локальный объект к сетке и перегрузочной сетки страницы 1.

var grid_data = $("#Grid_ID").jqGrid('getGridParam', 'data'); 
    $("#Grid_ID").jqGrid('clearGridData').jqGrid('setGridParam', { 
     datatype: 'local', 
     data: grid_data, 
     rowNum: grid_data.length 
    }).trigger('reloadGrid', [{ page: 1}]); 
+0

Это полезно! –

0

То же самое случилось со мной. Моя проблема была в файле PHP, который возвращает данные. Вы должны убедиться, что условия запроса, который подсчитывает записи, равны условиям, используемым для получения записей. Вероятно, оператор SQL для подсчета записей не имеет условий. (Извините, мои ошибки, я не говорю по-английски)

Смежные вопросы