private void OnCellValidating(object source, DataGridViewCellValidatingEventArgs e) { var row = Grid.Rows[e.RowIndex]; if (row.IsNewRow) { return; } var validationProxy = new GridValidationIntegrationProxy(Grid.Columns[e.ColumnIndex].DataPropertyName, e.FormattedValue, this); ValidationIntegrationHelper helper; try { helper = new ValidationIntegrationHelper(validationProxy); } catch (InvalidOperationException) { // ignore missing property return; } var validator = helper.GetValidator(); if(validator == null) { // this property should not be checked return; } var validationResults = validator.Validate(validationProxy); if (!validationResults.IsValid) { var builder = new StringBuilder(); foreach (ValidationResult result in validationResults) { builder.AppendLine(result.Message); } row.Cells[e.ColumnIndex].ErrorText = builder.ToString(); } else { row.Cells[e.ColumnIndex].ErrorText = string.Empty; } }
public void CanBuildValidatorForProperty() { object value = new object(); MockIntegrationProxy integrationProxy = new MockIntegrationProxy(value, "", ValidationSpecificationSource.Attributes, "ObjectProperty", typeof(MockValidatedType)); integrationProxy.ValueConvertEvent += OnValueConvertWithFailure; ValidationIntegrationHelper integrationHelper = new ValidationIntegrationHelper(integrationProxy); Validator validator = integrationHelper.GetValidator(); //Assert.IsNotNull(validator); //MockValidatedType instance = new MockValidatedType(); //ValidationResults validationResults = validator.Validate(instance); //Assert.IsFalse(validationResults.IsValid); //IList<ValidationResult> resultsList = ValidationTestHelper.GetResultsList(validationResults); //Assert.AreEqual(1, resultsList.Count); //Assert.AreEqual("object property message", resultsList[0].Message); }
/// <summary> /// Validate property. /// </summary> /// <param name="propName">Property name.</param> /// <returns>Error string or null.</returns> private string _ValidateProperty(string propName) { string error = null; if (_CanValidate(propName)) { _validationProxy.ValidatedPropertyName = propName; ValidationIntegrationHelper hlp = new ValidationIntegrationHelper( _validationProxy); Validator validator = hlp.GetValidator(); ValidationResults res = validator.Validate(this); if (!res.IsValid) error = _FindError(res, propName); } return error; }
/// <summary> /// Creates validators for objects of the specified type and it's properties. /// </summary> /// <param name="objectType">The type of objects to create validators for.</param> /// <returns>An instance of the validators container with validators for the specified /// type.</returns> private static ValidatorsContainer _CreateValidators(Type objectType) { Debug.Assert(objectType != null); var propertyFlags = BindingFlags.Instance | BindingFlags.Public; var validateableProperties = from propertyInfo in objectType.GetProperties(propertyFlags) where propertyInfo.GetCustomAttributes<BaseValidationAttribute>().Any() select propertyInfo; var propertyValidators = new Dictionary<string, Validator>(); foreach (var propertyInfo in validateableProperties) { var validationProxy = new PropertyValidationProxy { ProvidesCustomValueConversion = false, SpecificationSource = ValidationSpecificationSource.Attributes, ValidatedType = objectType, Ruleset = string.Empty, ValidatedPropertyName = propertyInfo.Name, }; var validationHelper = new ValidationIntegrationHelper(validationProxy); var validator = validationHelper.GetValidator(); propertyValidators.Add(propertyInfo.Name, validator); } var objectValidator = ValidationFactory.CreateValidator(objectType); return new ValidatorsContainer { ObjectValidator = objectValidator, PropertyValidators = propertyValidators, }; }