SMART datagrid v.1 > Examples

Back  Forward

Cell Validation  Example

在提交单元格编辑和行编辑的时点,将会运行指定在各个列的验证。 另外,GridBase.onValidateCell事件将会提供又一次验证的机会。 

1. Edit Validation

可以在DataColumn.validations属性中,指定一个以上的验证,并且如果在指定的多个验证中,即使一个验证没有被通过, 也会在提交变更时抛出例外。 另外,在提交之前,数据单元格中将会显示错误图标。验证是分别指定在各个中的(而非数据字段)。 

下列例题中,已设置了"产品代码"列中"必须要有值。"的条件。 有关表达式语法,请参考表达式概述主题。 有关被用于列EditValidation的表达式的变量列表,请参考验证概述主题。 

Code -1
    column.setValidations([{
        "expression": "值不能为空。",
        "level": DataLudi.ValidationLevel.WARNING,
        "message": strings["CommCodeMsg"]
    }]);

我们可以通过"error"、"warning"、"info"、"ignore"等四种ValidationLevel常数而指定level, 并且如果发生验证失败,相关数据单元格将会被设置为这些错误级别。 之后,当提交编辑行时, 如果情况比起通过网格editOptionscommitLevel设置的错误级别更为严重,就会导致编辑提交失败。 

我们可以通过空出产品代码的值并更改下列commtLevel设置而进行测试。 

Commit Level:
Grid - 1
0 rows

我们也可以实现只在行添加或修改时运行验证。 在例题中,"年度"列的两个EditValidation.mode已分别设置为"insert""update"。 如果没有被设置,则会一直运行"always"。 

Code -2
    column.setValidations([{
	    "expression": "value >= 2000",
	    "level": DataLudi.ValidationLevel.INFO,
	    "message": "年度必须要大于2000。",
	    "mode": DataLudi.ValidationMode.INSERT
    }, {
	    "expression": "value < 22000",
	    "level": DataLudi.ValidationLevel.INFO,
	    "message": "年度必须要小于2020。",
	    "mode": DataLudi.ValidationMode.UPDATE
    }]);

替代使用SMART datagrid本身的表达式语法的expression的方式, 也可以通过在使用JavaScript的callback属性中,指定回调函数并运行验证。 有关传递至回调函数中的scope参数,请参考验证概述主题。 

Code -3
    column.setValidations([{
	    "callback": function (scope) {
	        if (scope.value < 1000) {
	            return false;
	        }  
	    },
	    "level": DataLudi.ValidationLevel.ERROR,
	    "message": "交易额必须要大于1000。"
    }]);

如果在回调函数中明确返回false,就会导致验证失败。 

2. onValidteCell

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

进行行编辑时,在提交单元格编辑之前,将会触发onValidateCell事件。 如果在这个事件处理器中,调用throwValidationError并抛出例外,则会得出与使用Validation对象进行验证相同的结果。 下列例题中,如果"交易量"字段的值低于100,就会以ERROR级别导致验证失败。 

Code -4
    grid.onValidateCell = function (grid, index, inserting, value) {
        if (index.dataField() == dsMain.getFieldIndex('weight')) {
            if (value <= 100) {
                DataLudi.throwValidationError(DataLudi.ValidationLevel.ERROR, strings['WeightMsg']);
            }
        }
    };
Grid - 2

查看源代码 JSP 

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