jqgrid различные правила редактирования для добавления и редактирования - PullRequest
1 голос
/ 23 мая 2011

У меня есть сетка, которая используется для редактирования пользователей (права доступа, имя и т. Д.).
У меня также есть поле Пароль, которое в режиме редактирования доступно только для записи.
Значение: пароль не отображается, но если пользователь вводит значение для этого поля, то пароль изменяется.
Моя проблема в том, что при редактировании существующего пользователя я, очевидно, хочу, чтобы поле пароля было необязательным. Но при добавлении нового пользователя я хочу сделать это поле обязательным.
Как это можно достичь?
спасибо

Ответы [ 5 ]

2 голосов
/ 21 сентября 2011

Я использую метод "setColProp" для этого

......
{ //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}}); 
}
2 голосов
/ 23 мая 2011

для вашей проблемы вы можете использовать различные методы проверки при редактировании и добавлении.

Пример: function validate_add(posdata, obj) { if(posdata.PASSWORD==null || posdata.PASSWORD=="" || posdata.PASSWORD==undefined) return [false, "Please enter the pasword"];</p> <p>return [true, ""]; }</p> <p>function validate_edit(posdata, obj) { //you can ignore this because you dont want to verify password }</p> <p>// in jqgrid</p> <p>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 );

1 голос
/ 23 мая 2011

Sandeep опубликовал правильный код, потому что beforeSubmit может использоваться для пользовательской проверки.

Существует альтернативный подход к выполнению того, что вы хотите.Нельзя определять разные editrules , но можно изменить значение editrules объектов внутри метода beforeCheckValues, например, или внутри некоторых других событий редактирования формы вызывается до проверки достоверности.

Вот схема кода, которая может изменить 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;
        }
    }
);
0 голосов
/ 19 мая 2015

Следующий скрипт предназначен для проверки встроенной ячейки редактирования 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;
                        }
                    });
                }
            }
        },
0 голосов
/ 07 ноября 2014

Я нашел немного грязное решение для встроенного редактирования:

function inlineCustomValidation(value, colname) {

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

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

            //add operation validation

        } else {

           //edit operation validation

        }
    };

сохраненный ряд массив. Это свойство только для чтения и используется во встроенных модулях и модулях редактирования ячеек для хранения данных перед редактированием строки или ячейки. См. Редактирование ячейки и Встроенное редактирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...