Использование 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)
{
}
Что вы думаете об этом подходе?
Ответы
Ответ 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();