在我的情况下,我需要允许用户编辑网格中的各种单元格,然后将整个网格保存到服务器。我已经通过内联编辑和保存到'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;}
}
答案 0 :(得分:4)
为了解决这个问题,我使用了插件jquery.limitkeypress.min.js。
onSelectRow: function(id){
if(id && id!==lastsel){
jQuery('#treegrid').jqGrid('restoreRow',lastsel);
jQuery('#treegrid').jqGrid('editRow',id, true);
$("input[name=Presupuesto]").limitkeypress({ rexp: /^[+]?\d*\.?\d*$/ });
lastsel=id;
}
}
其中,“Presupuesto”是我向用户输入数据的列的名称。
它非常好......
答案 1 :(得分:2)
为了解决这个问题,您可以在下面的示例中编写自己的验证函数myRowIsValid
。然后,只需将此函数作为onSelectRow
事件处理程序的一部分调用:
onSelectRow: function(id){
if(id && id!==lastSel){
if (lastSel != null && !myRowIsValid(lastSel) ) {
// Display validation error somehow
return;
}
jQuery("#Groups").saveRow(lastSel,true,'clientArray');
jQuery("#Groups").editRow(id,true);
}
lastSel=id
},
基本上,如果验证失败,则让用户知道并且不要编辑下一行。
答案 2 :(得分:1)
我创建了一个名为edit_list的数组,并在回调oneditfunc中将rowid添加到列表中,并在aftersavefunc上将其从列表中删除。
通过这种方式,您可以检查回调中的edit_list,以确定是否有正在编辑的行。
答案 3 :(得分:0)
当OP首次询问时,这个解决方案可能不存在,但这就是我使用最新的jqGrid(4.4.4)解决它的方法。
我利用了saveRow在成功时将返回true / false的事实。
希望这有帮助。
function StartEditing($grd, id) {
var editparameters = {
"keys": true,
"url": 'clientArray'
};
$grd.jqGrid('editRow', id, editparameters);
$grd[0].LastSel = id;
}
onSelectRow: function(id) {
var $grd = $(this);
if (id && !isNaN($grd[0].LastSel) && id !== $grd[0].LastSel) {
if ($grd.jqGrid('saveRow', $grd[0].LastSel, { "url": 'clientArray' }))
StartEditing($grd, id);
else
$grd.jqGrid('setSelection', $grd[0].LastSel);
}
else
StartEditing($grd, id);
}
答案 4 :(得分:0)
要在saveRow事件中捕获编辑规则,您可以使用内置的返回类型' saveRow'如果你正在寻找这个,请标记为答案
yourcode:
onSelectRow: function(id){
if(id && id!==lastSel){
jQuery("#Groups").saveRow(lastSel,true,'clientArray');
jQuery("#Groups").editRow(id,true);
}
lastSel=id
}
modify code:
onSelectRow: function(id){
if(id && id!==lastSel){
var bool = jQuery("#Groups").saveRow(lastSel,true,'clientArray');
//bool true -->success,false -->invalid row /req field validations
if(bool)
{
//Returns true on sucessful save of record i.e to grid (when using client array)
//and set current selected row to edit mode
jQuery("#Groups").editRow(id,true);
}
else
{
//Set last selected row in edit mode and add required values
jQuery("#Groups").editRow(lastSel,true);
}
}
lastSel=id
}
onSelectRow: function(id){
if(id && id!==lastSel){
var bool = jQuery("#Groups").saveRow(lastSel,true,'clientArray');
//bool true -->success,false -->invalid row /req field validations
if(bool)
{
//Returns true on sucessful save of record i.e to grid (when using client array)
//and set current selected row to edit mode
jQuery("#Groups").editRow(id,true);
}
else
{
//Set last selected row in edit mode and add required values
jQuery("#Groups").editRow(lastSel,true);
}
}
lastSel=id
}