2010-08-09 2 views
2

У меня проблема с Jqgrid, у меня две сетки на одной странице, а onclick на строке первой сетки необходимо перезагрузить вторую сетку.JqGrid Reload не работает

Я на 100% уверен, что вторая сетка настроена правильно, если я вручную передаю жесткий код, он заполняется правильно.

Только функция перезагрузки не работает. Пожалуйста, помогите кому-нибудь. Ниже приведен код JQuery для обеих сеток

$(document).ready(function() {  
    jQuery("#list2").jqGrid({ 
     url:'classes/ListServices.php', 
     datatype: "json", 
     mtype: 'POST', 
     colNames: ['Id','Description', 'Details', 'Cost in (R)'], 
     colModel: [ 
      {name:'Id',index:'Id', align:"center", width:30}, 
      {name:'Description',index:'Description', align:"center"}, 
      {name:'Details',index:'Details', align:"left"}, 
      {name:'Cost',index:'Cost',align:"center",width:30,formatter:'currency'}, 
     ], 
     width: 780, 
     height: 100, 
     rowNum:18, 
     pager: '#pager1', 
     loadonce: true, 
     sortname: 'id', 
     viewrecords: true, 
     sortorder: "asc", 
     caption:"Services List", 
     multiselect: false, 
     onSelectRow: function(ids) { 
      if(ids == null) { 
       ids=0; 
       if(jQuery("#list3").jqGrid('getGridParam','records') >0) { 
        jQuery("#list3").jqGrid('setGridParam', 
              {url:"subgrid.php?q=1&id="+ids,page:1}); 
        jQuery("#list3").jqGrid.trigger('reloadGrid'); 
       } 
      } 
      else { 
       jQuery("#list3").jqGrid('setGridParam', 
             {url:"subgrid.php?q=1&id="+ids,page:1}); 
       jQuery("#list3").jqGrid.trigger('reloadGrid'); 
      }  
     } 
    }); 

    jQuery("#list2").jqGrid('navGrid','#pager2', 
          {edit:false,add:false,del:false,multipleSearch:true}); 
    jQuery("#list2").jqGrid('filterToolbar', 
          {stringResult: true,searchOnEnter : false}); 

    jQuery("#list3").jqGrid({ 
     url:'classes/ListServicesDetails.php?Id=2', 
     datatype: "json", 
     mtype: 'POST', 
     colNames: ['Id','ServiceId', 'Description', 'Details', 'Cost in (R)'], 
     colModel: [ 
      {name:'Id',index:'Id', align:"center", width:30}, 
      {name:'ServiceId',index:'ServiceId', align:"center", width:30}, 
      {name:'Description',index:'Description', align:"center"}, 
      {name:'Details',index:'Details', align:"left"}, 
      {name:'Cost',index:'Cost',align:"center",width:30,formatter:'currency'}, 
     ], 
     width: 780, 
     height: 200, 
     rowNum:18, 
     pager: '#pager2', 
     loadonce: true, 
     sortname: 'id', 
     viewrecords: true, 
     sortorder: "asc", 
     caption:"Services Details List", 
     multiselect: false, 
     onSelectRow: function(id) { 
      alert(id); 
     } 
    }); 
    jQuery("#list3").jqGrid('navGrid','#pager2', 
          {edit:false,add:false,del:false,multipleSearch:true}); 
}); 

Пожалуйста, если кто-то может помочь мне ...

Благодаря

ответ

14

Оба jqGrids имеет параметры loadonce: true. Это означает, что после первой загрузки сетки datatype будут изменены с "json" на "local". Чтобы перезагрузить вторую сетку, вы должны сбросить параметр datatype на "json" вместе с параметрами url и page.

+0

Привет, Олег, Спасибо миллион - работает 100%. Если я еще не сказал этого - этот форум скалы! Спасибо – user330306

+0

Это сработало для меня, а также мне не нужно было задавать параметры URL или страницы, спасибо! – Will

+2

@Will: Добро пожаловать! Параметр url перед 'jqGrid.trigger ('reloadGrid')' специфичен для вопроса, но в большинстве случаев рекомендуется использовать параметр 'page: 1'. Причина следующая. Позвольте пользователю выбрать номер страницы 5 перед обновлением данных и после перезагрузки общее количество страниц будет 4. Если вы не сбросите «страницу», пользователь может увидеть пустую страницу 5 после обновления и не поймет причину это. Чтобы решить эту проблему, вы не можете установить 'page: 1' перед' reloadGrid'. См. Также http://stackoverflow.com/questions/3807623/jqgrid-paging-question/3808014#3808014 – Oleg

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