行の編集が完了する時editOptions.[c.EditOptions.validations]]に一つ以上指定された検証を実行する。 また、検証の後GridBase.onValidateRowイベントが発生するがこのイベントハンドラー内でもう一回検証することができる。
行の編集完了の時には上の行単位検証の前に各カラムに設定されたカラム毎validationsを先に実行する。 CellValidationサンプルを参考する。
grdMain.editOptions().setValidations([{
"expression": "values['year'] >= 2000 && values['year] < 2020",
"level": DataLudi.ValidationLevel.ERROR,
"message": strings["YearMsg"],
"mode": DataLudi.ValidationMode.UPDATE
}]);
上のコードではyearフィールドの値が2000から2020の間の値ではなかったらエラーになるようにexpressionを設定する。 数式文法についてはExpression概要を参考する。 また、行の検証のためのEditValidtionのexpressionに使える変数の目録はValidation概要ヘルプを参考する。
"mode"はこの検証をどの時点で実行するかをValidationMode定数で指定する。コードでは行の修正の時だけ実行するようにしてある。
levelは"error"、"warning"、"info"、"ignore"などValidatioLevel定数四つで指定できて、 以後行の編集完了の時グリッドeditOptionsの commitLevelで設定したエラーレベルより深刻な場合編集完了が失敗になる。
年度の値と下のcommtLevel 設定を変えながらテストしてみる。
検証内容が少し複雑であるか、 SMART datagrid自体文法の数式が合わない場合なら、 下のコードのようにjavascriptコールバック関数をEditValidation.callbackプロパティーで指定する。 コールバック関数内で明示的にfalseをリターンすればEditValidationと同じ方式で処理される。 コールパックパラメーターscopeの構成についてはValidation概要ヘルプを参考する。
grdMain.editOptions().setValidations([{
"callback": function (scope) {
var v = scope.row.getData('year');
if (v < 2000 && v >= 2020) return false;
},
"level": DataLudi.ValidationLevel.ERROR,
"message": strings["YearMsg"],
"mode": DataLudi.ValidationMode.UPDATE
}]);
EditOptiosn.validationsプロパティーにEditValidation達を設定する代わりに、 グリッドのonValidateRowイベントハンドラーを作成してセル検証をすることもできる。
行の編集を完了する前にonValidateRowイベントが一回発生するが、 このイベントハンドラー内でthrowValidationErrorの呼び出して例外を発生させれば、 Validation客体を利用した検証と同じ結果になる。
grdMain.onValidateRow = function (grid, row, inserting, values) {
if (!values.comm_code) {
DataLudi.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を呼び出してエラーラベルとメッセージを渡すべきである。