数据验证无法在编辑模式下运行

时间:2014-12-30 20:45:05

标签: c# wpf entity-framework sqlite

我想在文本框中实现验证,以确定该名称是否存在于数据库中。我在c#中使用wpf。我在保存新数据的同时在文本框中实现了验证。我的问题是编辑模式:当我进入编辑模式并尝试保存时,会出现一个错误,表明该名称已存在。

以下代码在保存模式下正常工作但是当数据绑定时,编辑模式显示错误消息。

请给我一个很好的方法来实现在编辑模式下工作的验证。

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

2 个答案:

答案 0 :(得分:1)

如果名称已存在,您似乎无法对整个表单进行验证 - 每次尝试提交(编辑,插入等)时都会触发验证,因此编辑将始终失败。

我会制作两个文本框,一个用于插入,另一个用于编辑。在编辑模式下隐藏插入框,或者如果您想坚持使用插入框,至少在编辑时禁用验证器。

答案 1 :(得分: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表包含其他用户,而不是您正在创建或编辑的同一用户,则检查数据库具有相同的用户名。

希望这会对你有所帮助