DXErrorProvider可以为不同的DataAnnotation / Validator属性设置不同的错误类型吗?

时间:2017-01-27 08:10:53

标签: c# winforms validation devexpress

我有基类来检查控件验证。

  Validator.TryValidateObject(ds, new ValidationContext(ds), res, true);

给出了一组错误,特定数据源绑定到我的控件返回。

没关系,但DXErrorProvider也可以设置错误类型,例如"警告"。

有没有办法根据数据对象中的验证属性设置特定的错误类型?

现在我已经通过反射和检查我的属性的名称来实现它,但是这个解决方案似乎更加复杂和低效。

1 个答案:

答案 0 :(得分:0)

这不可能以自动方式实现。正如您可以阅读here,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) {}  
}

您还可以从ValidationResult编写一个后代,它包含一个Property ErrorType,可以在DataAnnotations中完整地处理验证逻辑。只有一种可能的解决方案,我觉得它运作得很好。