2009-09-04 1 views
2

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

Здесь у меня есть afterSubmit: и я хочу, чтобы он загорелся после того, как пользователь отредактировал поле «Количество» в сетке, но он никогда не срабатывает.

$('#tblLines').jqGrid({ 
     url: createUrl('/CRA/GetLines/'), 
     editurl: '/CRA/EditModifyLine', 
     emptyrecords: '', 
     datatype: 'json', 
     mtype: 'GET', 
     colNames: ['Group', 'Description', 'Quantity'], 
     colModel: [ 
     { name: 'Group', index: 'Group', width: 100, align: 'left' }, 
     { name: 'Description', index: 'Description', width: 400, align: 'left' }, 
     { name: 'Quantity', index: 'Quantity', width: 150, align: 'left', editable: true }, 
     pager: jQuery('#pgrLines'), 
     rowNum: 10, 
     rowList: [5, 10, 20, 50], 
     sortname: 'Group', 
     sortorder: "desc", 
     viewrecords: true, 
     caption: 'Core Group Lines', 
     onSelectRow: function(id) { 
      $('#tblCoreGroupLines').editRow(id, true); 
      lastsel = id; 
     }, 
     afterSubmit: function(response, postdata) { 
      alert('got here'); 
     }, 
     postData: { craId: $('#CraId').val() } 
    }); 

Я пробовал определять события ниже как часть navControl, но это тоже не работает. Встроенное редактирование прекрасно работает - POST успешно завершается, и результат возвращается, он просто не попадает в события, которые должны быть привязаны к нему. Я пробовал все события, связанные с изменением поля «Количество», но никто из них не работает.

Я определил событие в правильном месте? Я пропустил свойство на сетке или что-то еще?

ответ

8

Я думаю, вам необходимо передать в аргументе свойства значение editRow.

Таким образом, вы должны переместить afterSubmit так:

..... 
onSelectRow: function(id) { 
    $('#tblCoreGroupLines').editGridRow(id, { afterSubmit: function(response, postdata) { 
      alert('got here'); 
     } 
    }); 
    lastsel = id; 
}, 
... 

Документах о editGridRow рода помощь в этом отношении.

Вышеприведенный образец приведет к модификации (поскольку это единственное место, где используется afterSubmit). Если вы хотите сделать что-то после успешного обновления с использованием indline редактирования, вы должны быть в состоянии сделать следующее внутри onSelectRow

$('#tblCoreGroupLines').editGridRow(id,true, undefined, function(res) { 
    // res is the response object from the $.ajax call 
    alert('success!!') 
}); 

Вот метод подписи для editRow от JS/grid.inlineedit.js

editRow : function(rowid,keys,oneditfunc,succesfunc, url, extraparam, aftesarvefunc,errorfunc, afterrestorefunc) { 
+0

Я думаю, что вы на правильном пути. Тем не менее, этот оператор editRow имел два параметра .editRow (id, true). Что случилось с логическим «истинным» параметром? Кажется, что камера не подчиняется без нее. –

+0

извините, это должно быть editGridRow. – seth

+0

Я надеялся избежать всплывающего окна. Идеально хотел получить это поведение для встроенных изменений в сетке. –

1

Вы также можете использовать событие aftersavefunc в методе editRow, чтобы получить ответ сервера, если это единственное, что вы ищете.