SMART datagrid v1.4 > 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
    }]);

위 코드에서는 year 필드의 값이 2000에서 2020 사이의 값을 벗어나면 에러가 되도록 expression을 설정했다. 수식 문법에 대해서는 Expression 개요를 참조한다. 또, 행 검증을 위한 EditValidtion의 expression에 사용할 수 있는 변수 목록은 Validation 개요 도움말을 참조한다. 

"mode"는 이 검증을 어느 시점에 실행할 것인 지를 ValidationMode 상수로 지정한다. 코드에서는 행 수정일 경우에만 실행하도록 했다. 

level은 "error", "warning", "info", "ignore" 등 ValidationLevel 상수 네 가지로 지정할 수 있고, 이 후 행 편집 완료시 그리드 editOptionscommitLevel로 설정한 에러 레벨보다 심각한 경우 편집 완료가 실패하게 된다. 

년도의 값과 아래 commtLevel 설정을 바꿔가면서 테스트 해본다. 

Commit Level:
Grid - 1
0 rows

검증 내용이 조금 복잡하거나, DataLudi 자체 문법의 수식이 맞지 않는 경우라면, 아래 코드처럼 javascript 콜백 함수를 EditValidation.callback 속성으로 지정한다. 콜백 함수 내에서 명시적으로 false를 리턴하면 EditValidation과 동일한 방식으로 처리된다. 콜백 매개변수 scope의 구성에 관해서 Validation 개요 도움말을 참조한다. 

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) {
            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']);
            }
        }
    };

inserting 매개변수는 행 수정이면 false, 추가일 때는 true다. values에는 편집행에 현재 입력된 값이 속성들로 포함된 json 객체다. 검증 에러가 있는 경우 반드시 throwValidationError를 호출해서 에러 레벨과 메시지를 전달해야 한다. 

소스보기 JSP 

See Also
Validation 개요
ValidationLevel
EditOptions.commitLevel
GridBase.editOptions
GridBase.onValidateRow
GridBase.onValidateCell
throwValidationError
Examples
셀 Validation
셀 편집
행 수정
행 추가
행 삭제