Search code examples
jqgridjqgrid-formattermvcjqgrid

Pass RowData to Custom_func in Jqgrid


I have a jqgrid with certain columns. I am trying to call a custom_function to validate the cell value.

I am also getting a regular expression from the database into rowData, which I want to use to validate the cell value.

var ret = jQuery("#settingsListGrid").jqGrid('getRowData', id);
cm.editrules = {
    required: true, 
    custom: true, 
    custom_func: ValidateData, 
    custom_value:ret.RegX 
};

So I need to pass rowData to a custom function.

ValidateData = function (value, colname, customValue) {
    return customValue.test(value) ?
        [true] :
        [false, "Invalid Data"];
}

I want to pass the rowData using customValue

Please help?


Solution

  • The answer depend on the fork of jqGrid, which you use. I understand the problem which you wrote, but one have to change the code of jqGrid (the implementation of custom validation) to implement the requirement.

    I develop free jqGrid fork of jqGrid after Tony Tomov changed the license agreement of jqGrid, renamed his product in version 4.7.1 to Guriddo jqGrid JS (see the post) and made it commercial (see the prices here). After starting the development based on the last free 4.7 version I made a lot of changes and improvements in the code and have implemented many new features. The feature which you need is implemented starting with version 4.12.1 (see here). Thus you can easy solve your problem after updating to the current free jqGrid 4.13.2.

    The new feature works as following:

    editrules: {
        required: true, 
        custom: ValidateData, 
        custom_value: ret.RegX 
    }
    

    It's important that one should specify the custom validation function as the value of custom property instead of usage custom_func. It allows free jqGrid to hold compatibility to old versions (via custom: true and custom_func), but providing new parameters of the validation callback via function as the value of custom property.

    The new style ValidateData will look like

    var ValidateData = function (options) {
        return customValue.test(options.newValue) ?
            [true] :
            [false, "Invalid Data"];
    }
    

    with only one options parameter, which have many properties which you could use. Such style allows to provide many helpful information without the requirement to have a lot of unneeded parameters. Moreover the style of callback options allows to extend the options object in the future versions without breaking compatibility to previous versions.

    The options parameter have the following properties

    • newValue - the current (modified) value which need be validated
    • oldValue - the previous value (the old value) of the cell before the modification
    • cmName - the column name. It could be practical if you use one callback function in many columns and you want to implement a little different behavior for different columns. It could be additionally helpful for producing readable error message in case of validation error.
    • iCol - the index in the current colModel which corresponds the column (the column cmName)
    • cm - the element of colModel, which represent the currently validating column.
    • rowid - the rowid of the current editing row. One can use getLocalRow for example to get the content of other columns before editing. It's important to remark that getLocalRow works only in case of usage datatype: "local" or loadonce: true. The method getRowData or getCell can be safe used to get data in form editing mode or to access the data, which are not currently editing (in cell or inline editing mode).
    • iRow - numeric index of the current editing row from the top of the grid (from the top of HTML <table>)
    • oldRowData - will be set only in case of usage inline editing or cell editing. It's not defined in form editing mode. It represent the values
    • mode - shows which editing mode is used now. It can be "addForm", "editForm" (in case of usage form editing), "cell" (cell editing), "add" or "edit" (inline editing). In some other callback function the property could have two other values: "filter" (field from the filter toolbar) or "search" (for validation of the field of the searching dialog)
    • tr and td - the DOM elements of the row and cell of the grid which will be edited using form editing mode. The properties will be set only in case of form editing.

    I hope that the large set of properties of options parameter allows you easy implement your requirements on any custom validation.