В моей ситуации мне нужно разрешить пользователям редактировать различные ячейки в сетке, а затем сохранять всю сетку на сервере позже. Я в значительной степени решил эту проблему с помощью встроенного редактирования и сохранения в «clientArray». Однако я пытаюсь использовать editRules и столкнулся с некоторыми проблемами.
Если я сделаю столбец редактируемым и использую правила редактирования, чтобы он был числом
{ name: 'Value', index: 'Value', width: 50, sortable: true,edittype: 'text',
editable: true, editoptions: { maxlength: 10 },
editrules:{number: true},
formatter:currencyFmatter, unformat:unformatCurrency },
и я управляю редактированием и сохранением в событии onSelectRow
:
onSelectRow: function(id){
if(id && id!==lastSel){
jQuery("#Groups").saveRow(lastSel,true,'clientArray');
jQuery("#Groups").editRow(id,true);
}
lastSel=id
},
Затем я использую событие нажатия кнопки, чтобы сохранить сетку. Все работает отлично, пока я не поместил нечисловое значение в ячейку Value, а затем щелкнул строку под ней. Он выдает предупреждение и останавливает сохранение, но не мешает мне менять строки. Теперь у меня есть две открытые строки для редактирования. Есть ли способ отловить ошибку editrule, чтобы я мог обработать ее, прежде чем перейти к следующей строке.
Я попытался использовать функции с saveRow (succesfunc, aftersavefunc, errorfunc, afterrestorefunc), из которых все говорят, что огонь после сохранения данных на сервере, который не работает для «clientArray».
По сути, мне нужно найти способ проверки данных во встроенном редактировании при их сохранении в «clientArray», и информация, предложения и, в частности, примеры будут очень полезны.
Спасибо.
Поработав некоторое время, я решил, что правила редактирования не очень хорошо работают с редактированием inLine. Итак, как вы предложили, я сделал свою собственную процедуру проверки. Хитрость заключалась в том, чтобы выяснить, как получить значение отредактированной строки.
Единственное, что я сейчас пытаюсь выяснить, - как заставить фокус вернуться к столбцу «Значение». Вернуться к документации!
if(id && id!==lastSel){
//dont save if first click
if (lastSel != -1) {
//get val of Value to check
var chkval = jQuery("#"+lastSel+"_Value").val() ;
// verify it is a number
if (isNaN(chkval)) {//If not a number
//Send Validation message here
//Restore saved row
jQuery("#Grid").restoreRow(lastSel);
//Return to failed save row
jQuery("#Grid ").setSelection(lastSel,false);
//reopen for editing
jQuery("#Grid ").editRow(lastSel,true);
//Note - dont reset lastSel as you want to stay here }
else {
// If number is good, proceed to save and edit next
jQuery("#Grid ").jqGrid('saveRow',lastSel, checksave, 'clientArray', {}, null, myerrorfunc);
jQuery("#Grid ").editRow(id,true);
lastSel=id;
};
isDirty = true;
};
else {
//first click - open row for editing
alert("new Edit")
jQuery("#Grid ").editRow(id,true);
lastSel=id;}
}