У меня есть DataGridView
с 3 столбцами, два из которых доступны для редактирования.
Я получаю исключение NullRef при доступе к значению ячейки как таковой
someObject.Property = dgv.Rows(x).Cells(y).Value.ToString()
Это было очевидно потому, что я не проверяю значение null перед использованием значения. Поэтому вместо того, чтобы просто проверять значение Nothing
(которое я буду делать сейчас, никогда не боюсь), я решил изменить объект, который инициализирует DataGridView
чтобы никогда не содержать null для свойства string, которое заполняет ячейку. Вместо этого я использовал String.Empty
.
Я думал, что все будет хорошо и хорошо, но кажется, что, когда я редактирую ячейку и оставляю ее пустой, она рассматривает ее как нулевое значение вместо String.Empty
. Я обработал CellBeginEdit
, CellEndEdit
и CellLeave
пытаясь найти, откуда он получает это магическое нулевое значение, безрезультатно.
Я видел свойство DataGridViewCellStyle.NullValue
в MSDN, которое я считал ответом, но, как оказалось, свойство NullValue
умолчанию имеет значение String.Empty
поэтому это не имеет большого смысла.
Очевидно, что простой ответ здесь - "просто проверить нуль, прежде чем использовать его", но почему я не могу заставить его обрабатывать пустую строку как пустую строку вместо нуля?
Значения ячейки datagrid - это объекты, пустая строка - null.
Вы можете преобразовать его в строку, а затем проверить на string.empty, но он не за горами, просто проверяя, нет ли этого.
dim _value as string = dgv.Rows(x).Cells(y).Value
someObject.Property = _value
или написать функцию для проверки
Public Function checkForNull(_value as object) as string
If _value is nothing then return string.empty else return _value.tostring()
End Function
....
SomeObject.Property = checkForNull(dgv.Rows(x).Cells(y).Value)