В моей ситуации мне нужно разрешить пользователям редактировать различные ячейки в сетке, а затем сохранить всю сетку на сервере позже. Я в значительной степени решил эту проблему с помощью встроенного редактирования и сохранения в 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
},
Затем я использую событие нажатия кнопки, чтобы сохранить сетку. Все работает отлично, пока я не введу нечисловое значение в ячейку «Значение», а затем щелкну строку под ним. Он выдает предупреждение и останавливает сохранение, но не мешает мне менять строки. Итак, у меня открыты для редактирования две строки. Есть ли способ уловить ошибку editrule, чтобы я мог обработать ее, прежде чем перейти к следующей строке.
Я пытался использовать функции с saveRow (Succesfunc, aftersavefunc, errorfunc, afterrestorefunc), все из которых говорят, что срабатывают после данных сохраняется на сервере, который, похоже, не работает для clientArray.
По сути, мне нужно найти способ проверки данных при встроенном редактировании при сохранении в clientArray, и я буду очень благодарен за информацию, предложения и, в частности, примеры.
Спасибо.
Поиграв некоторое время, я решил, что правила редактирования не так хорошо работают с inLine Editing. Итак, как вы предложили, я сделал свою собственную процедуру проверки. Уловка заключалась в том, чтобы выяснить, как получить значение отредактированной строки.
Единственное, что я сейчас пытаюсь понять, это как вернуть фокус обратно в столбец «Значение». Вернемся к документации!
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;}
}