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