Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: формат времени до сотых долей секунд в DGV Добавлено: 05.03.09 18:50  

Автор вопроса:  aleha

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 16
Автор ответа:
 aleha



Вопросов: 8
Ответов: 19
 Профиль | | #16 Добавлено: 07.03.09 16:13
вот теперь новая проблема всплыла:
сделал обработчик проверки ввода значений в ячейки грида. Всё работает нормально, но когда дохожу до последней строки, после ввода результата (нажатия ENTER) выскакивает ошибка о невозможности записи в ячейку, а если клацнуть мышкой на предыдущей ячейке, то всё проходит нормально....
пользователи должны вводить данные в формате, которого я добивался в предыдущих сообщениях, т.е.: "мм:сс:ДС"
в событии CellValidating я использовал следующий код:
  1. ...
  2. dgResults.CancelEdit() 'для отмены уже введенных данных, так как они не соответсвуют формату timespan
  3. dgResults.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "00:" + EnteredString 'ввод данных соответствующих формату
  4. ...

так вот при нахождении в последней строке грида и нажатии ENTER-а выскакивает ошибка:
Cannot set column 'Имя колонки' to be null. Please use DBnull instead
как в ходе проверки выяснил, то данная ошибка происходит при вызове метода CancelEdit, которая отменяет режим редактирования для текущей выбранной ячейки и удаляет все изменения. Видимо пытается впихнуть туда Null а система не может этого воспринять. При этом во всех строках кроме последней это работает нормально.
Обработчик нажатий не помогает, так как он не срабатывает в режиме редактирования ячейки. Вот и думаю, что же делать....
правда если убрать CancelEdit, то получается он сначала выдает ошибку что не может запихнуть туда введенные значения, что они типа не совпадают с форматом данных и если нажать после этого ESC то отображаются нормально записанные данные, т.е. вторая команда срабатывает. ))) вобщем маялся с одной проблемой, теперь маюсь с другой)))

Ответить

Номер ответа: 17
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 07.03.09 16:50
Cannot set column 'Имя колонки' to be null. Please use DBnull instead

Это говорит о том, что dgv пытается записать туда null.. что, по всей видимости, у тебя не допустимо.. чтобы избавиться от этого попробуй задать ему принудительно NullValue (находится там же где ты Format задавал) запиши туда что то типа "0.00:00:00.0000000" т.е. в том виде в котором который TimeSpan сможет парсить..
dgResults.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "00:" + EnteredString

а вот тут ты должен привести результирующую строку к тому же формату что и в предыдущем случае, иначе тоже будет ошибка преобразования данных(в CellFormat TimeSpan.Parse скорее всего вызовет исключение). Об отображении не беспокойся, CellFormat сделает свое дело и покажет данные в том виде в котором они должны быть.. Кроме того, обрати внимание на код который привел ранее как более коротку альтернативу моему варианту. Там timespan преобразуется в строку, а datetime его парсит, что не некорректно и может вызывать ошибку при несовпадении форматов... будет лучше если ты используеь мой вариант записи и вместо TimeSpan.Parse используешь TimeSpan.TryParse чтобы исключить ошибки преобразования.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам