В моей ситуации мне нужно разрешить пользователям редактировать различные ячейки в сетке, а затем сохранить всю сетку на сервере позже. Я довольно сильно решил эту проблему с встроенным редактированием и сохранением в clientArray. Тем не менее, я пытаюсь использовать editRules и столкнулся с некоторыми проблемами.jqGrid - inline edit and trapping edit rules
Если я столбец редактируемые и использовать редактирования правила требуют, чтобы быть номером
{ 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. Итак, как вы предположили, я сделал свою собственную процедуру проверки. Хитрость заключалась в том, чтобы понять, как получить значение отредактированной строки.
Единственное, что я пытаюсь выяснить сейчас, это то, как получить фокус, чтобы вернуться к столбцу Value. Вернемся к документации!
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;}
}
Спасибо, Джастин. Я попытался двигаться по этому пути, но не уверен, как получить данные из строки. Я попробовал jQuery ("# rowid_myCol"). Val(), чтобы получить значение моего значения, но это не работает. Как получить значение Value, чтобы я мог его протестировать. --DW –
OK, вам действительно нужно сначала вызвать saveRow(), чтобы вы могли правильно получить доступ к данным строки. Я должен прояснить это выше. Затем вы можете использовать getRowData() для получения данных для строки. Это помогает? –
Если я вызову saveRow(), если не удалось отредактировать и не будет сохранен. Думаю, я был близок. Я считаю, что мне нужно использовать jQuery (#lastSel_myCol "). Val(). Я попал в неправильную строку. Если я получу это правильно, я отправлю его. –