Изменить поведение обработки ввода данных пользователем DataGridViewCell - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть приложение winform со столбцом TimeSpan, в котором отображается часть часов / минут даты.Когда пользователь вводит текст, он преобразуется в интервал времени с помощью TimeSpan.TryParse().Это работает, как и ожидалось, когда пользователь вводит «11:00» при установке значения 11 часов.Проблема состоит в том, что если использование вводит «1100», оно анализируется как 1100 дней, что не является тем, что я хочу, и просто не говорит «плохой ввод» в удовлетворительном поведении события CellValidating.

Ввод пользователя предоставляется в свойстве только для чтения DataGridViewCellValidatingEventArgs.FormattedValue, поэтому я не могу изменить значение, передаваемое через цепочку вызовов.DataGridViewTextBoxCell.EditedFormattedValue также доступен только для чтения, и я не могу найти другое событие или свойство, которое позволяет переопределить поведение по умолчанию.

Это очень расстраивает.Я могу написать многоэтапный провал через валидатор, который может обрабатывать несколько пользовательских форматов ввода и получать желаемое значение от каждого;но если я не выбрасываю все строго типизированные привязки данных, которые предлагает инфраструктура, и вместо этого создаю объект-оболочку, который хранит все значения в виде строк, похоже, никакого способа сделать это не существует.

1 Ответ

2 голосов
/ 09 сентября 2010

Каким-то образом из 10 миллиардов событий в DataGridView мне удалось пропустить CellParsing. Отмена этого позволяет мне делать то, что мне нужно.

...