SMART datagrid v1.4 > 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.WARNING,
        "message": strings["CommCodeMsg"]
    }]);

level은 "error", "warning", "info", "ignore" 등 ValidationLevel 상수 네 가지로 지정할 수 있고, 검증에 실패하면 해당 데이터셀은 이 에러 레벨로 설정된다. 이 후 행 편집 완료시 그리드 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
    }]);

DataLudi 자체 수식 문법을 사용하는 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

소스보기 JSP 

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