jqgrid different editrules for when adding and editing

15,139

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;
        }
    }
);
Share:
15,139
J. Ed
Author by

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, 2022

Comments

  • J. Ed
    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
    Oleg almost 13 years
    You 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 with editrules, but two different editrules values for Add and Edit dialogs.
  • Sandeep
    Sandeep almost 13 years
    im 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
    Oleg almost 13 years
    @Sandeep: There are no way to 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 checking.
  • Sandeep
    Sandeep almost 13 years
    hmmm actually im confused... can you please post that alternative as an answer... thanks..