SMART datagrid v.1 > Examples

Back  Forward

Cell Validation  Example  準備中...

行の編集が完了する時、そして行の編集を完了する時点でカラム毎に指定された 検証を実行する また、GridBase.onValidateCellイベントがもう一回の検証の機会を提供する。 

1. EditValidation

DataColumn.validationsプロパティーに一つ以上のValidationが指定できて、 指定したValidationの中で一つでも通過できないと変更の完了の時に例外が発生する。 また、完了の前にはデータセルにエラーアイコンが表示される。Validationはデータフィールドではなくカラム毎に指定する。 

下のサンプルで"製品コード"カラムには"必ず値があるべきである。"といる条件が設定された。 Expression文法についてはExpression概要トピックを参考する。 カラムEditValidationの表現式に使える変数の目録はValidation概要トピックを参考する。 

Code -1
    column.setValidations([{
        "expression": "value is not empty",
        "level": DataLudi.ValidationLevel.ERROR,
        "message": strings["CommCodeMsg"]
    }]);

levelは"error"、"warning"、"info"、"ignore"などValidatioLevelの定数四つで指定することができて、 検証に失敗したらが該当データセルはこのエラーレベルで設定される。 以後行の編集完了の時グリッドeditOptionscommitLevelで設定したエラーレベルより深刻な場合完了が失敗になる。 

製品コードの値を空けてcommtLevel設定を変えながらテストしてみる。 

Commit Level:
Grid - 1
0 rows

Validationが行を追加する時、もしくは行の修正の時だけに実行されるようにすることもできる。 サンプルで"年"カラムの二つの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パラメーターについてはValidation概要トピックを参考する。 

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

ソースを見る 

See Also
Validation概要
ValidationLevel
EditOptions.commitLevel
GridBase.editOptions
GridBase.onValidateCell
GridBase.onValidateRow
throwValidationError
Examples
行Validation
セル編集