2014-12-30 2 views
1

이름이 데이터베이스에 있는지 여부를 텍스트 상자에 검증을 구현하고 싶습니다. 나는 C#으로 wpf를 사용하고있다. 새 데이터를 저장하는 동안 텍스트 상자에 대한 유효성 검사를 구현했습니다. 내 문제는 편집 모드입니다 : 편집 모드로 이동하여 저장하려고하면 이름이 이미 존재한다는 오류가 나타납니다.편집 모드에서 데이터 유효성 검사가 작동하지 않습니다.

아래 코드는 저장 모드에서 잘 작동하지만 데이터가 바인딩되면 오류 메시지가 표시 될 때 편집 모드가됩니다.

pls는 나에게 편집 모드에서도 작동하는 유효성 검사를 구현하는 좋은 방법을 제안합니다. 당신이 이름이 이미 존재하는 경우 유효성 검사가 전체 양식 실패하고있는 것처럼

class MyParent 
{ 
    public MyCarClass CurrentCarEntity {get; set;} 

    private void txtName_TextChanged(object sender, RoutedEventArgs e) 
    {    
     CurrentCarEntity.Name = txtName.Text.Trim(); 
     var getName = //Code for getting name from local db 

     if(CurrentCarEntity.Name != Null) 
      { 
       if(getName.Equals(CurrentCarEntity.Name)) 
       { 
        MessageBox.Show("Name Already Exists"); 
       } 
      } 
    } 
} 
+0

도움이 될 것입니다

희망 당신은 당신이 당신의 텍스트 상자에 유효성 검사를 구현 한 말,하지만 난 당신의 질문에 어디서나 볼 수 없습니다. – learningcs

답변

0

당신이 우리가

public class User: IValidatableObject 
{ 
    public int Id{get; set;} 
    public string UserName{get; set;} 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
      if(string.IsNullOrEmpty(UserName)) 
       yield return new ValidationResult("Username field is required!", new string[]{"UserName"}); 
      else 
      { 
       // check if another User has the same username already 
       var db= new YourDbContext(); 
       var exists=db.Users.FirstOrDefault(t=>t.Id!=Id && t.UserName.ToLower()=UserName.ToLower()); 
       if(exists!=null) 
        yield return new ValidationResult("Username is already used by another user!", new string[]{"UserName"}); 
      } 
    } 
} 

당신이 있기 때문에, 편집에 대해 걱정하거나 만들 필요가 없습니다를 다음과 같이 사용자 클래스를 호출했다고 가정하자 잘못된 접근

을 따르고 있는지 보인다 두 경우 모두 사용자 테이블에 다른 사용자가 포함되어 있고 만들거나 편집중인 동일한 사용자가 동일한 사용자 이름을 가지고있는 경우 데이터베이스를 확인하는 경우입니다. 이 당신에게

+0

db (SQLITE)에서 데이터를 가져 오기 위해 Entity 프레임 워크를 사용하고 있습니다. 제 시나리오에서 IDataErrorInfo 또는 IValidatableObject를 구현하는 방법을 알려주십시오. @hadi –

+0

@RanjithM 코드를 편집하고 IValidatableObject 구현을 추가했습니다. – Monah

+0

@RanjithM WPF를 사용하는 질문 태그에서 위에서 언급 한 것처럼 WPF를 사용하지 않았지만 Windows 양식 응용 프로그램과 동일한 경우에는 IDataErrorInfo 및 IValidatableObject를 구현하는 DataErrorInfo 클래스를 구현하기 위해 둘 다 함께 작업 할 수 있으며 어떤 도움이 필요하면 어떻게 할 수 있는지 보여줄 수 있습니다 – Monah

1

이 보이는 - 유효성 검사가 당신이 편집이 항상 실패 있도록 (등 편집, 삽입을) 제출하려고 할 때마다 트리거됩니다.

필자는 두 개의 텍스트 상자를 만들 것입니다. 하나는 삽입 용이고 하나는 편집 용입니다. 편집 모드에서 삽입 상자를 숨기거나 편집하려면 삽입 할 때 유효성 검사기를 비활성화하십시오.

+0

편집 모드에서 유효성 검사를 비활성화하면 사용자가 기존 이름을 입력하면 이름이 중복 될 수 있습니다. 다른 방법으로이 작업을 수행 할 수 있습니까 ??? –

관련 문제