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);
        }
Example #3
0
        /// <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,
            };
        }