Подтвердить что ты не робот

Использование DataAnnotations в проекте Windows Forms

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

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

UPDATE: Я использовал подход Стив Сандерсон, который будет проверять атрибуты в моем классе и возвращать коллекцию такие ошибки:

        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)
        {

        }

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

4b9b3361

Ответ 1

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

Ответ 2

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

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: Пространство имен DataAnnotations

Ответ 3

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

Вот ссылка. Атрибуты проверки DataAnnotations в Windows Forms

Ответ 4

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

YourDbContext.Entity(YourEntity).GetValidationResult();