Использование DataAnnotations в проекте Windows Forms - PullRequest
16 голосов
/ 21 января 2010

Я недавно использовал ASP.Net MVC с DataAnnotations и думал об использовании того же подхода для проекта Forms, но я не уверен, как это сделать.

Я установил свои атрибуты, но, кажется, они не проверяются при нажатии кнопки Сохранить.

ОБНОВЛЕНИЕ: Я использовал Подход Стива Сандерсона , который проверит атрибуты в моем классе и выдаст набор ошибок, например:

        try
        {
            Business b = new Business();
            b.Name = "feds";
            b.Description = "DFdsS";
            b.CategoryID = 1;
            b.CountryID = 2;
            b.EMail = "SSDF";
            var errors = DataAnnotationsValidationRunner.GetErrors(b);
            if (errors.Any())
                throw new RulesException(errors);

            b.Save();
        }
        catch(Exception ex)
        {

        }

Что вы думаете об этом подходе?

Ответы [ 4 ]

21 голосов
/ 08 августа 2011

Вот простой пример. Предположим, у вас есть объект, подобный следующему

using System.ComponentModel.DataAnnotations;

public class Contact
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "First name is required")]
    [StringLength(20, MinimumLength = 5, ErrorMessage = "First name must be between 5 and 20 characters")]
    public string FirstName { get; set; }

    public string LastName { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime Birthday { get; set; }
}

И предположим, у нас есть метод, который создает экземпляр этого класса и пытается проверить его свойства, как указано ниже

    private void DoSomething()
    {
        Contact contact = new Contact { FirstName = "Armin", LastName = "Zia", Birthday = new DateTime(1988, 04, 20) };

        ValidationContext context = new ValidationContext(contact, null, null);
        IList<ValidationResult> errors = new List<ValidationResult>();

        if (!Validator.TryValidateObject(contact, context, errors,true))
        {
            foreach (ValidationResult result in errors)
                MessageBox.Show(result.ErrorMessage);
        }
        else
            MessageBox.Show("Validated");
    }

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

И обязательно проверьте ссылку на MSDN: Пространство имен аннотаций

5 голосов
/ 15 октября 2010

Пример Стива немного устарел (хотя все еще хорош). Имеющийся у него DataAnnotationsValidationRunner теперь может быть заменен классом System.ComponentModel.DataAnnotations.Validator, у него есть статические методы для проверки свойств и объектов, которые были украшены атрибутами DataAnnotations.

0 голосов
/ 24 января 2019

Я нашел хороший пример использования DataAnnotations с WinForms с использованием класса Validator, включая привязку к интерфейсу IDataErrorInfo, чтобы ErrorProvider мог отображать результаты.

Вот ссылка. Атрибуты проверки данных в аннотациях в Windows Forms

0 голосов
/ 12 июня 2014

Если вы используете новейшие версии Entity Framework, вы можете использовать этот cmd для получения списка ваших ошибок, если они существуют:

YourDbContext.Entity(YourEntity).GetValidationResult();
...