C# DXErrorProvider能否为不同的DataAnnotation/Validator属性设置不同的错误类型?

C# DXErrorProvider能否为不同的DataAnnotation/Validator属性设置不同的错误类型?,c#,winforms,validation,devexpress,C#,Winforms,Validation,Devexpress,我有一个检查控件验证的基类 Validator.TryValidateObject(ds, new ValidationContext(ds), res, true); 提供绑定到控件的特定数据源返回的一组错误 这很好,但DXErrorProvider也可以设置错误类型,例如“警告” 是否有任何方法可以根据数据对象中的验证属性设置特定的错误类型 目前,我已经通过反射和检查属性名称实现了这一点,但这个解决方案似乎比它可能的更复杂、更低效 这不可能以自动方式实现。如您所知,DXErrorPro

我有一个检查控件验证的基类

  Validator.TryValidateObject(ds, new ValidationContext(ds), res, true);
提供绑定到控件的特定数据源返回的一组错误

这很好,但DXErrorProvider也可以设置错误类型,例如“警告”

是否有任何方法可以根据数据对象中的验证属性设置特定的错误类型


目前,我已经通过反射和检查属性名称实现了这一点,但这个解决方案似乎比它可能的更复杂、更低效

这不可能以自动方式实现。如您所知,DXErrorProvider完全基于接口
IDXDataErrorInfo
。如果您仅使用带有错误图标的DataAnnotations,则不需要DXErrorProvider,因为这是由控件本身处理的。因此,如果您想使用自定义图标,可以将其与错误处理方式混合使用。例如,你可以这样做:

public class MyClass : IDXDataErrorInfo
{
   [Range(0,100)]
   [//Further custom validation]
   public int Id {get;set;}

   //Implement the Interface for your DXErrorProvider
   public void GetPropertyError(string propertyname, ErrorInfo info)
   {
      List<ValidationResult> errors = new List<ValidationResult>();

      if (propertyname.Equals(nameof(Id))
      {
        if (!Validator.TryValidateProperty(Id, new ValidationContext(this,null,null), errors))
        {
            string errorText = string.Empty;
            errors.ForEach(e => errorText += e.ErrorMessage);

            //This type set's the error-icon
            info.ErrorType = //The Type you want ErrorType.Warning for example
            info.ErrorText = errorText;
        }
      }
    }
       
       public void GetError(ErrorInfo info) {}  
}
公共类MyClass:IDXDataErrorInfo
{
[射程(0100)]
[//进一步的自定义验证]
公共int Id{get;set;}
//实现DXErrorProvider的接口
public void GetPropertyError(字符串propertyname,ErrorInfo)
{
列表错误=新列表();
if(propertyname.Equals(nameof(Id))
{
if(!Validator.TryValidateProperty(Id,new ValidationContext(this,null,null),errors))
{
string errorText=string.Empty;
errors.ForEach(e=>errorText+=e.ErrorMessage);
//此类型集是错误图标
info.ErrorType=//您想要的类型ErrorType.Warning例如
info.ErrorText=ErrorText;
}
}
}
public void GetError(ErrorInfo info){}
}
您还可以从ValidationResult编写一个由属性
ErrorType
组成的子体,以便在DataAnnotation中完整地处理验证逻辑。我认为这是一个可能的解决方案,效果非常好