KeiStory

BlazorDatasheet 에서 특정 문자 입력 방지하기

 

BlazorDatasheet 에서 Cell 에 대한 Validation 을 처리하기 위해서는 IDataValidator 를 상속받아 Validator 를 구현하여 처리가 가능합니다.

IDataValidator 에는 IsValid 를 이용해서 Validation 을 처리할 수 있고 

Message 를 이용해서 메세지를 띄워줄수 있습니다.

IsStrict 값이 true 인 경우 입력 자체를 방지하고  false 로 하면 입력은 되지만 글자가 빨간색이 됩니다.

/// <summary>
/// 특정 문자열 입력 방지 하기
/// </summary>
public class CharacterValidator : IDataValidator
{
    /// <summary>
    /// IsStrict=true이면 편집 중에 검증이 실패해도 셀의 값은 변경되지 않습니다.
    /// IsStrict=false이면 셀 값은 변경되지만 셀은 유효하지 않은 것으로 표시됩니다.
    /// </summary>
    public bool IsStrict { get; }
    /// <summary>
    /// 검증기의 메시지로, 사용자가 어떤 검증이 실패했는지 알아내는 데 도움이 됩니다.
    /// </summary>
    public string Message => $"The value must not contain the character '{forbiddenString}'.";

    /// <summary>
    /// 입력 방지할 문자열 리스트
    /// </summary>
    public List<string> ForbiddenList { get; }
    /// <summary>
    /// 문제가 된 문자열
    /// </summary>
    private string? forbiddenString;

    /// <summary>
    /// CharacterValidator
    /// </summary>
    /// <param name="forbiddens"></param>
    /// <param name="isStrict"></param>
    public CharacterValidator(string forbiddens, bool isStrict)
    {
        ForbiddenList = forbiddens.Split(',').ToList();
        IsStrict = isStrict;
    }

    /// <summary>
    /// 값이 검증을 통과하는지 여부를 반환합니다. true 면 유효성 통과
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public bool IsValid(CellValue value)
    {
        if (value.IsEmpty || value.IsError())
            return false;

        var str = value.GetValue<string>();

        var containedString = ForbiddenList.FirstOrDefault(str.Contains);
        forbiddenString = containedString;

        return containedString == null;
    }
}

 

위 만든 CharacterValidator 를 sheet.Validators 에 추가합니다.

var characterValidator = new CharacterValidator("a,b,c", true);
sheet.Validators.Add(new ColumnRegion(3), characterValidator);

위 코드를 보면 알 수 있듯이 a,b,c 값이 입력이 되면 에러 창이 뜨고 입력이 더이상 진행되지 않습니다.

 

결과
cell 값이 a 가 들어가 있어 문제가된 문자열을 포함한 메세지를 보여줍니다.

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band