sobota, 31 października 2009
Ostatnio przedstawiłem sposób konfiguracji i wykorzystania biblioteki NHibernate.Validator w aplikacji Windows Forms. Po wypełnieniu formularza użytkownik otrzymywał jedynie informację, iż jest on wypełniony poprawnie/niepoprawnie.
Warto byłoby oznaczyć błędnie wypełnione pola. W tym celu wykorzystam komponent ErrorProvider. Aby nie pisać wszystkiego od początku, wykorzystam odrobinę zmodyfikowany projekt NHibernate.Validator.Binding.
Modyfikacja polega na dodaniu settera dla właściwości ValidatorEngine w klasie NHibernate.Validator.Binding.ViewValidator. Integrację walidatora z konkretnym ErrorProviderem i skonfigurowanym poprzednio silnikiem ValidatorEngine zapewni helper:
public class ValidationHelper
{
public static SmartViewValidator CreateValidator(
ErrorProvider errorProvider)
{
return new SmartViewValidator(errorProvider)
{
ValidatorEngine = Environment.SharedEngineProvider
.GetEngine()
};
}
}
W klasie formularza powołujemy do życia obiekt SmartViewValidator:
SmartViewValidator validator = ValidationHelper.CreateValidator(errorProvider1);
validator.Bind(typeof (User))
.With(txtFirstName)
.With(txtLastName)
.With(txtAge);
Klasa SmartViewValidator zakłada, iż w nazwie kontrolki musi występować nazwa właściwości. Teraz tworzymy funkcję sprawdzającą poprawność wprowadzonych danych:
private bool Valid(User user)
{
return ValidateChildren() && validator.ValidatorEngine.IsValid(user);
}
Na koniec sprawdzamy poprawność wprowadzonych danych:
User userToValidate = GetUserFromUI();
if (Valid(userToValidate))
{
MessageBox.Show("Formularz wypełniony prawidłowo!");
}
Kod źródłowy aplikacji można pobrać stąd.