SMART datagrid v.1 > Examples

Back  Forward

Row Validation  Example

当提交行编辑时,将会运行指定在editOptions.validations中的一个以上的验证。 而且,运行验证后,将会触发GridBase.onValidateRow事件,并且可以在这个事件处理器中,重新进行一次验证。 

当提交行编辑时,在进行上述行单位的验证之前,首先运行设置在各个列中的validations。 请参考CellValidation例题。 

Code -1
    grdMain.editOptions().setValidations([{
        "expression": "values['year'] >= 2000 && values['year] < 2020",
        "level": DataLudi.ValidationLevel.WARNING,
        "message": strings["YearMsg"],
        "mode": DataLudi.ValidationMode.UPDATE
    }]);

上述代码中,已有设置expression,所以当年度字段值超出2000至2020之间时,将会发生错误。 有关表达式语法,请参考表达式概述。 另外,有关为行验证而用于EditValidtion的expression的变量列表,请参考验证概述帮助。 

"mode"通过ValidationMode常数,指定运行这个验证的时点。已在代码中,设置了只运行在行修改的情况。 

我们可以通过"error"、"warning"、"info"、"ignore"等四种ValidationLevel常数而指定level。 之后,当提交编辑行时, 如果情况比起通过网格editOptionscommitLevel设置的错误级别更为严重,就会导致编辑提交失败。 

我们可以通过变更年度值和下列commtLevel设置而进行测试。 

Commit Level:
Grid - 1
0 rows

如果是验证内容较为复杂或SMART datagrid身语法的表达式不符合的情况, 就可以如下列代码,将JavaScript的回调函数指定为EditValidation.callback属性。 如果在回调函数中明确返回false,就会通过与EditValidation相同的方式进行处理。 有关回调参数scope的构成,请参考验证概述帮助。 

Code -2
    grdMain.editOptions().setValidations([{
        "callback": function (scope) {
            var v = scope.row.getValue('year');
	        if (v < 2000 || v >= 2020) return false;
        },
        "level": DataLudi.ValidationLevel.ERROR,
        "message": strings["YearMsg"],
        "mode": DataLudi.ValidationMode.UPDATE
    }]);

替代在EditOptions.validations属性中设置EditValidation的方式, 也可以通过编写网格的onValidateRow事件处理器而运行行验证。 

在提交行编辑之前,将会触发一次onValidateRow事件。 如果在这个事件处理器中,调用throwValidationError并抛出例外,则会得出与使用Validation对象进行验证相同的结果。 

Code -3
    grdMain.onValidateRow = function (grid, row, inserting, values) {
        if (!values.comm_code) {
            SMART datagrid.throwValidationError(DataLudi.ValidationLevel.ERROR, strings['CommCodeMsg']);
        }
        if (inserting) {
            if (values.weight < 100) {
                DataLudi.throwValidationError(DataLudi.ValidationLevel.INFO, strings['WeightMsg']);
            }
        } else {
            if (values.weight < 200) {
                DataLudi.throwValidationError(DataLudi.ValidationLevel.INFO, strings['WeightMsg2']);
            }
        }
    };

inserrting参数在行修改时是false,而在行添加时是true。 values是在编辑行中,包含当前输入值为属性的json对象。 如果发生验证错误,就必须要通过调用throwValidationError而传递错误级别和信息。 

查看源代码 JSP 

See Also
验证概述
ValidationLevel
EditOptions.commitLevel
GridBase.editOptions
GridBase.onValidateRow
GridBase.onValidateCell
throwValidationError
Examples
单元格验证
单元格编辑
行修改
行添加
行删除