Re[2]: Кто прикручивал свой UserControl к DataGridView
От: realchel Россия  
Дата: 12.01.08 13:22
Оценка:
Здравствуйте, Igor_P, Вы писали:

I_P>Здравствуйте, realchel, Вы писали:


R>>Собственно проблему не описываю.

I_P>А зря

I_P>Что значит прикрутить? показывать контрол в клеточках датагрида или что-то еще? Кстати DataGridView у себя я не нашел, может это фишка .NET 2.0?

I_P>Сам как-то прикручивал комбобокс, аналогично dateTimePickerу




Есть свой контрол который наследуется от TextBox
В контроле на событие Validating весит обработка, введенные значения проверяются,и если не соответсвуют нужным,выдается сообщение.
И соотвественно из контрола не выходим.
cancel=true

Решил этот контрол сделать в виде колонки в DataGridView
Взял общеизвестный пример с DataTimePiсker
Все отлично привязалось,даже свои свойства к колонке добавил.
Но вот проблема.
Когда я в таблице,уже при редактировании ячейки со своим контролом жму Enter или выхожу по TAB.
То сробатывает событие Validating в моем контроле,где идет проверка на корректность введенных данных.Все отлично,так должно быть.
И если значение не корректное,то я присваиваю Cancel=true
Что бы запретить выходить из контрола.
Но вот DataGridView на это чихал, и спокойно переходит в другую ячейку.


Выяснилось,что у класса DataGridViewEditingConlrol
событие DetachEditingControl срабатывает раньше чем Valideting в моем контроле.

Как вариант было переопределить onDetachEditingControl в своем DataGridViewEditingControl и не вызвать метод базового класса
DetachEditingControl. Но как я уже сказал выше, последовательность сработки событий происходит не так как хотелось бы.

Щас попробовал еще вариант с переопределением onDetachEditingControl в котором не вызываю метод базового класса.
А методе onValideting(он переопеределен от моего контрола) в классе
DataGridViewEditingConlrol, вызывать метод onDetachEditingControl ,
если значение корректное. Но блин, DataGridView всеравно скачит в следующую ячейку.
Что еще сделать ума не приложу.
Как то же стандартные контролы корректно работают. Допустим тот же календарь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.