2017-01-27 6 views
0

У меня есть базовый класс, который проверяет проверку проверки.Может ли DXErrorProvider устанавливать разные типы ошибок для разных атрибутов DataAnnotation/Validator?

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

дает мне набор ошибок, с которыми связан определенный источник данных, привязанный к моим элементам управления.

Это прекрасно, но DXErrorProvider также может установить тип ошибки, например «предупреждение».

Есть ли способ установить конкретный тип ошибки в соответствии с атрибутами проверки в моем объекте данных?

На данный момент я достиг этого путем отражения и проверки имен моих атрибутов, но это решение кажется более сложным и неэффективным, чем могло бы быть.

ответ

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 который состоит из собственности ErrorType для обработки вашей логики проверки укомплектовать в ваших DataAnnotations. Просто одно возможное решение, которое, я думаю, работает очень хорошо.