2014-12-30 3 views
1

Я хочу реализовать проверку в текстовом поле для того, существует ли имя в базе данных. Я использую wpf с C#. Я выполнил проверку в текстовом поле при сохранении новых данных. Моя проблема в режиме редактирования: когда я перехожу в режим редактирования и пытаюсь сохранить, появляется ошибка, что имя уже существует.Проверка данных не работает в режиме редактирования

В нижнем коде работает нормально в режиме сохранения. Но когда дело доходит до режима редактирования, когда данные привязываются к сообщению об ошибке.

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"}); 
      } 
    } 
} 

вам не нужно беспокоиться о том, редактировать или создавать, так как в в обоих случаях вы проверяете базу данных, если таблица Users содержит другого пользователя, а не тот пользователь, которого вы создаете или редактируете, имеет то же имя пользователя.

надеюсь, что это поможет вам

+0

Я использую структуру Entity для получения данных из db (SQLITE), пожалуйста, сообщите, как реализовать IDataErrorInfo или IValidatableObject для моего сценария. @hadi –

+0

@RanjithM я отредактировал код и добавил реализацию IValidatableObject – Monah

+0

@RanjithM, о которой вы упомянули выше, в своих тегах вопроса, которые вы используете WPF, раньше я не использовал WPF, но если это то же самое, что и приложения в форме окон, тогда вам нужно для реализации класса DataErrorInfo, который реализует IDataErrorInfo и IValidatableObject, оба могут работать вместе, и я могу показать вам, как если вам все еще нужна помощь – Monah

1

Похоже, вы делаете проверки терпят неудачу по всей форме, если имя уже существует - проверка будет запускать каждый раз, когда вы пытаетесь представить (редактирование, вставку и т.д.), поэтому редактирование всегда будет терпеть неудачу.

Я бы сделал два текстовых поля, один для вставок и один для редактирования. Скройте окно вставки в режиме редактирования или, если вы хотите придерживаться одного, по крайней мере отключите валидатор при редактировании.

+0

Если я отключу проверку в режиме редактирования, имя может быть дублировано, если пользователь вводит существующее имя ... есть ли другой способ сделать это ??? –

Смежные вопросы