Получение сообщения об ошибке для поля
От: Larian  
Дата: 29.05.08 14:59
Оценка:
Не могу понять как получить сообщения для поля.
Понравилась реализация из Demo\WinForms\Forms\BizEntityForm.cs

Но там при ошибке поля горят красным, а если нет ошибки, то желтым.
Это говорит об ошибке, но не передает ее смысл. Валидация там реализована следующим образом

protected bool Validate(Control control, bool validateCombines)
        {
            bool result = true;
            foreach (Binding binding in control.DataBindings)
            {
                if (binding.BindingManagerBase == null || binding.BindingManagerBase.Count == 0)
                    continue;

                BizEntity item = binding.BindingManagerBase.Current as BizEntity;

                if (item != null)
                {
                    string key = GetBindingKey(item, binding, control);

                    if (!_keyToControl.ContainsKey(key))
                        continue;

                    ControlInfo ci        = _keyToControl[key];
                    string      fieldName = binding.BindingMemberInfo.BindingField;

                    bool isValid = ci.IsValidatable?
                        ci.PropertyDescriptor != null?
                            Validator.IsValid(item, ci.PropertyDescriptor):
                            item.IsValid(fieldName):
                        true;

                    if (isValid)
                    {
                        if (item.IsDirtyMember(fieldName))
                            SetDirty(control);
                        else
                            ResetControl(control);
                    }
                    else
                    {
// тут хочется вогнать сообщение об ошибке для поля в ErrorProvider
// но его невозможно получить. Можно получить все возможные сообщения ошибок для поля.
                        SetInvalid(control);

                        result = false;
                    }

                    ....
                }
            }

            return result;
        }


Я обычно решаю этот вопрос патчем файла Validator.cs
Я просто при проверке в public static bool IsValid(ValidationContext context, string fieldName)
формирую словарь куда и записываю пару поле-сообщение, а потом достаю и вывожу на форме.

Но каждый раз патчить — дело несерьезное.

Подскажите правильный вариант. Может я где-то чего-то недоглядел?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.