当提交行编辑时,将会运行指定在editOptions.validations中的一个以上的验证。 而且,运行验证后,将会触发GridBase.onValidateRow事件,并且可以在这个事件处理器中,重新进行一次验证。
当提交行编辑时,在进行上述行单位的验证之前,首先运行设置在各个列中的validations。 请参考CellValidation例题。
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。 之后,当提交编辑行时, 如果情况比起通过网格editOptions的commitLevel设置的错误级别更为严重,就会导致编辑提交失败。
我们可以通过变更年度值和下列commtLevel设置而进行测试。
如果是验证内容较为复杂或SMART datagrid身语法的表达式不符合的情况, 就可以如下列代码,将JavaScript的回调函数指定为EditValidation.callback属性。 如果在回调函数中明确返回false,就会通过与EditValidation相同的方式进行处理。 有关回调参数scope的构成,请参考验证概述帮助。
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对象进行验证相同的结果。
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而传递错误级别和信息。