jqgrid different editrules for when adding and editing
Solution 1
for your problem you can use different validation methods when editing and adding.
example:
function validate_add(posdata, obj)
{
if(posdata.PASSWORD==null || posdata.PASSWORD=="" || posdata.PASSWORD==undefined)
return [false, "Please enter the pasword"];
return [true, ""]; }
function validate_edit(posdata, obj) { //you can ignore this because you dont want to verify password }
// in jqgrid
grid.navGrid('#pager',{add:true,addtext:'Add',edit:true,edittext:'Edit',del:true,deltext:'Del', search:true,searchtext:'Find',refresh:true}, //options {width:700,reloadAfterSubmit:true, beforeSubmit:validate_edit}, // edit options {width:700,reloadAfterSubmit:true, beforeSubmit:validate_add}, // add options {}, //del options {} //search options );
Solution 2
I use method "setColProp" for this
......
{ //Edit dialog options
beforeCheckValues: function(postdata, formid, mode) {
grid.setColProp('Password', {editrules: {required: false}});
},
{ //Add dialog options
beforeCheckValues: function(postdata, formid, mode) {
grid.setColProp('Password', {editrules: {required: true}});
}
Solution 3
Sandeep posted correct code because beforeSubmit
can be used for the custom validation.
There are alternative approach to do what you want. One can't define different editrules, but one can change the value of the editrules
objects inside of beforeCheckValues method for example or inside of some other form edit events called before validation check.
Here is the schema of the code which can change the editrules
:
var grid = $("#list"),
getColumnIndexByName = function(columnName) {
var cm = grid.jqGrid('getGridParam','colModel'), // grid[0].p.colModel
i=0, l=cm.length;
for (; i<l; i++) {
if (cm[i].name===columnName) {
return i; // return the index
}
}
return -1;
},
addEditrulesPassword={required:true /*some other settings can follow*/},
editEditrulesPassword={required:false /*some other settings can follow*/};
// ... first of all we define the grid
grid.jqGrid({
// all parameters including the definition of the column
// with the name 'Password' inside of `colModel`
});
grid.jqGrid(
'navGrid','#pager',{/*navGrid options*/},
{//Edit dialog options
},
{//Add dialog options
beforeCheckValues:function(postdata,$form,oper) {
// get reference to the item of colModel which correspond
// to the column 'Password' which we want to change
var cm = grid[0].p.colModel[getColumnIndexByName('Password')];
cm.editrules = addEditrulesPassword;
},
onclickSubmit:function(ge,postdata) {
// get reference to the item of colModel which correspond
// to the column 'Password' which we want to change
var cm = grid[0].p.colModel[getColumnIndexByName('Password')];
cm.editrules = editEditrulesPassword;
}
}
);
J. Ed
I've been programming information systems using a variety of technologies (C#, javascript, ruby) for the last ten-odd years. I enjoy thinking about, and discussing, clean code and architecture.
Updated on November 20, 2022Comments
-
J. Ed over 1 year
I have a grid which is used for editing users (permissions, name etc.).
I also have a Password field, which, in editing mode, is write-only.
Meaning- the password is not displayed, but if a user inserts a value for this field- then the password is changed.
My issue is that when editing an existing user, I obviously want the password field to be optional. But when adding a new user, I want to make this field required.
How can this be acheived?
thanks -
Oleg almost 13 yearsYou are right, the
beforeSubmit
can be used for custom validation. So +1 from me. After your answer will be accepted I'll post description of another way: how one can use standard validation witheditrules
, but two differenteditrules
values for Add and Edit dialogs. -
Sandeep almost 13 yearsim afraid that you cannot do it with <code>editrules</code> because editrules is under <code>common_rules</code> module which is common for both add and edit... it will b great if you can do it...
-
Oleg almost 13 years@Sandeep: There are no way to define different
editrules
, but one can change the value of theeditrules
objects inside ofbeforeCheckValues
method for example or inside of some other form edit events called before validation checking. -
Sandeep almost 13 yearshmmm actually im confused... can you please post that alternative as an answer... thanks..