Рассмотрим форму ввода данных, в которой пользователю необходимо ввести время в военном формате.Они хотят набирать с клавиатуры, чтобы ускорить их работу, но не хотят вводить двоеточие (:) между часами / минутами.
Столбец отформатирован, чтобы разрешить время, и автоматически преобразует время встандартные форматы AM / PM.К сожалению, для этого требуется двоеточие.Поэтому на этом входе необходимо запустить метод преобразования, чтобы попытаться преобразовать его во временное значение.
Способ сделать это не является частью ответа, который я ищу.Это может представлять любую причину, по которой кто-то захочет изменить значение, введенное пользователем, в другое значение.Ключевым моментом является то, что это должно произойти до проверки, чтобы событие DataError не вызывалось.
Я предполагал, что CellValidating будет подходящим местом для этого, поэтому я написал то, что ожидал работать:
private void sampleDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// Ensure we're looking at the column that requires our attention
if (sampleDataGridView.Columns[e.ColumnIndex].Name == "timeCol")
sampleDataGridView[e.ColumnIndex, e.RowIndex].Value = convertMilitary(e.FormattedValue);
}
При входе в этот код после записи в ячейку аргументы события говорят мне, что отформатированное значение действительно соответствует ключу, но попытка установить текущее значение ячейки не помогает валидации,При ближайшем рассмотрении я узнал, что это значение остается тем же, что и до ввода пользователя.
Это ставит меня в тупик, потому что я не вижу, где еще я мог бы это поставить.Я чувствую, что нахожусь в правильном месте, но я что-то упускаю.Куда мне поместить это преобразование, чтобы событие DataError не возникало из-за неудачной проверки?
Возможно, есть другое свойство, которое мне нужно установить?Как будто я должен изменить то, что пользователь ввел, а не значение ячейки напрямую, как я пытаюсь сделать ...