jqgrid用于添加和编辑时的不同编辑规则

问题描述

| 我有一个用于编辑用户(权限,名称等)的网格。 我也有一个密码字段,在编辑模式下,它是只写的。 含义-不显示密码,但是如果用户在此字段中输入值-则更改密码。 我的问题是,在编辑现有用户时,我显然希望密码字段是可选的。但是,在添加新用户时,我想将此字段设为必填字段。 如何做到这一点? 谢谢     

解决方法

对于您的问题,可以在编辑和添加时使用不同的验证方法。 例:
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,beforeSubmit:validate_add},// add options {},//del options {} //search options );

    ,我为此使用方法“ setColProp”
......
{ //Edit dialog options
beforeCheckValues: function(postdata,formid,mode) {
  grid.setColProp(\'Password\',{editrules: {required: false}}); 
},{ //Add dialog options
beforeCheckValues: function(postdata,{editrules: {required: true}}); 
}
    ,Sandeep发布了正确的代码,因为ѭ2可以用于自定义验证。 有其他方法可以做您想要的。一个人不能定义不同的编辑规则,但是可以在例如beforeCheckValues方法内部或在验证检查之前调用的某些其他表单编辑事件内部更改
editrules
对象的值。 这是可以更改
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;
        }
    }
);
    ,我发现内联编辑有点脏的解决方案:
function inlineCustomValidation(value,colname) {

        var savedRow = jQuery(\"#grid\").getGridParam(\"savedRow\");

        if (savedRow[0].some_required_field == \"\")

            //add operation validation

        } else {

           //edit operation validation

        }
    };
savedRow数组。这是一个只读属性,在行和单元格编辑之前,用于内联和单元格编辑模块中以存储数据。请参见单元格编辑和内联编辑。     ,下面的脚本用于验证jqgrid内联编辑单元格,它将不允许用户输入除用于指定小数点分隔符的点(。)以外的任何特殊字符。
{ name: \'Amount\',width: 22,label: \'Cost\',editable: true,align: \"right\",sorttype: \'int\',search: false,formatter: \'currency\',formatoptions: { prefix: \"$\",thousandsSeparator: \",\",decimalPlaces: 2,defaultValue: \'0.00\' },editoptions: {
                dataInit: function(element) {
                    $(element).keypress(function (e) {
                        if (e.which != 8 && e.which != 0 && e.which != 46 && (e.which < 48 || e.which > 57 )) {
                            return false;
                        }
                    });
                }
            }
        },