2013-03-08 2 views
1

Я использую параметры редактирования inlineNav для добавления и редактирования строк. Данные корректно обновляются в базе данных, но я не могу найти способ обновить сетку после успешного сохранения без отправки на сервер.Как обновить jqgrid, используя данные ответа, возвращенные из редактирования

Все вопросы & Ответы, которые я нахожу, рекомендуют делать $. ('Grid'). Trigger ('reloadGrid');

Но это кажется ненужным, если ответ с сервера уже содержит требуемые данные. Это прежде всего проблема при добавлении новой записи, а значение ID отображается как jqg1.

Я использую ASP.NET MVC4, с jqGrid 4.4.4.

Вот мой взгляд

$(document).ready(function() { 
    var emptyMsgDiv = $('<div>No school codes to display.</div>'); 
    var grid = $('#tblSchools'); 

    grid.jqGrid({ 
     datatype: 'json', 
     viewrecords: true, 
     url: '@Url.Action("SchoolsGridData")', 
     editurl: '@Url.Action("EditSchoolsGridData")', 
     colNames: ['School ID', 'Name', 'SACE Number', 'School Code', 'LEA Code', 'DFEE Code', 'Active'], 
     colModel: [ 
        { name: 'SchoolId', index: 'SchoolId', width: 80, key: true }, 
        { name: 'Name', index: 'Name', width: 190, editable: true }, 
        { name: 'SaceSchoolNumber', index: 'SaceSchoolNumber', width: 105, editable: true, sortable: false }, 
        { name: 'Code', index: 'Code', width: 105, editable: true, sortable: false }, 
        { name: 'LeaCode', index: 'LeaCode', width: 80, editable: true, sortable: false }, 
        { name: 'DfeeCode', index: 'DfeeCode', width: 80, editable: true, sortable: false }, 
        { name: 'Active', index: 'Active', width: 80, editable: true, sortable: false } 
     ], 
     shrinkToFit: true, 
     height: "100%", 
     caption: 'School list', 
     rowNum: 10, 
     rowList: [10, 15, 20], 
     emptyrecords: 'No school codes to display.', 
     pager: '#schoolsPager', 
     loadComplete: function() { 
      var count = grid.getGridParam(); 
      var ts = grid[0]; 
      if (ts.p.reccount === 0) { 
       grid.hide(); 
       emptyMsgDiv.show(); 
      } else { 
       grid.show(); 
       emptyMsgDiv.hide(); 
      } 
     } 
    }).trigger('reloadGrid', [{ page: 1 }]); 

    emptyMsgDiv.insertAfter(grid.parent()); 

    grid.jqGrid('navGrid', "#schoolsPager", { edit: false, add: false, del: true }); 
    grid.jqGrid('inlineNav', '#schoolsPager', { 
     addParams: { 
      position: "last", 
      addRowParams: { 
       "keys": true, 
       "aftersavefunc": function (rowid, response) { 
        alert('row: ' + rowid + ', response: ' + $.param(response)); 
       } 
      } 
     }, 
     editParams: { 
      "aftersavefunc": function (rowid, response) { 
       alert('row: '+rowid+', response: '+response); 
      } 
     } 
    }); 

    }); 
</script> 
<h3>Maintain Schools</h3> 

<table id="tblSchools"></table> 
<div id="schoolsPager" class="gridPager"></div> 

и мой контроллер

public JsonResult EditSchoolsGridData(string oper, string SchoolId, string Name, string SaceSchoolNumber, string Code, string LeaCode, string DfeeCode, string Active) 
{ 
    [Update Logic] 

    return SchoolsGridData(string.Empty, "asc", 1, 10); 
} 

[HttpGet] 
public JsonResult SchoolsGridData(string sidx, string sord, int? page, int? rows) 
{ 
    [Get data logic] 
} 

Я могу видеть JSON ответ отображается в aftersavefunc, но не может найти способ, чтобы привязать его к сетка.

Является ли то, что я пытаюсь сделать, даже возможно?

ответ

0

Вы можете использовать метод addRowData который установит данные по сетке с нашими перегрузочной сеткой

jQuery("#tblSchools").jqGrid('addRowData', response.SchoolId, response, "first"); 

See the jqgrid methods wiki for more details

+0

Спасибо за это. Я думаю, что addRowData больше нацелен на отдельные строки, но прямо над ним на wiki был addJSONData. Направил меня в правильном направлении. –

+0

Добро пожаловать. addJSONData - добавить несколько строк, а addRowData добавит одну строку. Тогда есть еще один подобный метод setRowData, который заменит данные новым, используя идентификатор строки. – Kris