Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据验证未在编辑模式下工作_C#_Wpf_Entity Framework_Sqlite - Fatal编程技术网

C# 数据验证未在编辑模式下工作

C# 数据验证未在编辑模式下工作,c#,wpf,entity-framework,sqlite,C#,Wpf,Entity Framework,Sqlite,我想对数据库中是否存在该名称的文本框进行验证。我将wpf与c#一起使用。我在保存新数据时对文本框进行了验证。我的问题是在编辑模式下:当我转到编辑模式并尝试保存时,会出现一个错误,表明该名称已存在 下面的代码在保存模式下运行良好,但当数据绑定到编辑模式时,会显示错误消息 请建议我一个很好的方法来实现验证工作的编辑模式太 class MyParent { public MyCarClass CurrentCarEntity {get; set;} private void txtN

我想对数据库中是否存在该名称的文本框进行验证。我将wpf与c#一起使用。我在保存新数据时对文本框进行了验证。我的问题是在编辑模式下:当我转到编辑模式并尝试保存时,会出现一个错误,表明该名称已存在

下面的代码在保存模式下运行良好,但当数据绑定到编辑模式时,会显示错误消息

请建议我一个很好的方法来实现验证工作的编辑模式太

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

如果名称已存在,则看起来您正在使整个表单的验证失败-验证将在每次尝试提交(编辑、插入等)时触发,因此编辑将始终失败


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

似乎您采用了错误的方法

假设我们有一个名为users的类,如下所示

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"});
          }
     }
}
公共类用户:IValidatableObject
{
公共int Id{get;set;}
公共字符串用户名{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
if(string.IsNullOrEmpty(用户名))
返回新的ValidationResult(“需要用户名字段!”,新字符串[]{“用户名”});
其他的
{
//检查其他用户是否已经具有相同的用户名
var db=newyourdbcontext();
var exists=db.Users.FirstOrDefault(t=>t.Id!=Id&&t.UserName.ToLower()=UserName.ToLower());
如果(存在!=null)
返回新的ValidationResult(“用户名已被其他用户使用!”,新字符串[]{“用户名”});
}
}
}
您不必担心编辑或创建,因为在这两种情况下,如果Users表包含另一个用户,而不是您正在创建或编辑的同一个用户具有相同的用户名,那么您将检查数据库


希望这将帮助您

您说您已经在文本框上实施了验证,但我在您的问题中没有看到它。如果我在编辑模式下禁用验证,如果用户输入现有名称,则名称可能会重复。。。还有其他方法吗???我正在使用实体框架从db(SQLITE)获取数据,请告诉我如何为我的场景实现IDataErrorInfo或IValidatableObject@hadi@RanjithM我编辑了代码并添加了IValidatableObjectimplementation@RanjithM您在上面的问题标签中提到您正在使用WPF,我以前没有使用WPF,但是如果它与windows窗体应用程序相同,那么您需要实现实现IDataErrorInfo和IValidatableObject的DataErrorInfo类,两者都可以一起工作,我可以告诉你如果你还需要任何帮助看看这篇文章,它可能会帮助你,谢谢你的回复,伙计们,让我试试,并会让你知道状态@HadiHassan mah