mzeaken Ответов: 1

Как избавиться от ошибки system. null reference exception object reference not set to an instance of an object


Я получаю ошибку, когда читаю данные в нулевой или пустой ячейке в datagridview, чтобы включить отправку данных на фискальный принтер

пожалуйста вот эта часть кода


ке.PrintRecMessage("--------------------------------------------")

ке.PrintRecMessage ("сумма цены кол-во товара")

ке.PrintRecMessage("--------------------------------------------")


Dim max1 As Integer = Qualitix_POS. Form1.DataGridView1.Rows.Количество-1

Для каждой строки, а ячейки datagridviewrow в Qualitix_POS.Форма form1.DataGridView1.Строк


ке.PrintRecItem (описание:=строка.Ячейки ("Column2"). значение, Цена:=строка.Ячейки ("Column4"). значение, количество:=строка.Ячейки ("Column3"). Значение.Метод toString.PadRight(4, "0"), VatInfo:=строка.Ячейки ("Column6"). значение, UnitPrice:=строка.Ячейки ("Column4"). Value, UnitName:=row.Ячейки ("Column1"). Значение)

Следующий

Что я уже пробовал:

ke.PrintRecMessage("--------------------------------------------")

            ke.PrintRecMessage("ITEM        QTY        PRICE          AMOUNT")

            ke.PrintRecMessage("--------------------------------------------")


            Dim max1 As Integer = Qualitix_POS.Form1.DataGridView1.Rows.Count - 1

            If Qualitix_POS.Form1.DataGridView1.Rows.Count - 1 = Nothing Then


                For Each row As DataGridViewRow In Qualitix_POS.Form1.DataGridView1.Rows


                    ke.PrintRecItem(Description:=row.Cells("Column2").Value, Price:=row.Cells("Column4").Value, Quantity:=row.Cells("Column3").Value.ToString.PadRight(4, "0"), VatInfo:=row.Cells("Column6").Value, UnitPrice:=row.Cells("Column4").Value, UnitName:=row.Cells("Column1").Value)

                Next

            End If

Richard MacCutchan

Легко, вы добавляете некоторую правильную проверку в свой код, чтобы справиться с ситуацией, когда ячейка не содержит того, что вы ожидаете.

mzeaken

Ричард я добавил чек в петлю и это сработало

если row < & gt; ничего тогда
...
конец, если

1 Ответов

Рейтинг:
6

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: Вы попытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего такого, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать смотреть на различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Мы не можем сделать это для вас - так что попробуйте и посмотрите, что вы можете узнать!


mzeaken

OriginalGriff Спасибо за аналогию с рубашкой и ручкой я понял почему я получаю null позвольте мне посмотреть где я получаю null значение в моем коде

mzeaken

Я добавил строку, чтобы проверить, является ли она нулевым значением, как показано ниже, но я не могу успешно печатать

Для каждой строки, а ячейки datagridviewrow в Qualitix_POS.Форма form1.DataGridView1.Строк

Если грести.Ячейки ("Column2"). Значение Тогда Ничего Не Значит

Возвращать

Конец, Если

ке.PrintRecItem (описание:=строка.Ячейки ("Column2"). значение, Цена:=строка.Клеток("Столбец_4").Значение.ToString, Quantity:=строка.Ячейки ("Column3"). Значение.Метод toString.PadRight(4, "0"), VatInfo:=Convert.Метод toString(строки.Клеток("Column6").Значение), Цена:=Конвертировать.Метод toString(строки.Клеток("Столбец_4").Значение), UnitName:="")

Следующий

mzeaken

Добавьте чек в цикл, и он сработал

если row < & gt; ничего тогда
...
конец, если
Если это не помогает, у нас есть некоторые обертки в нашем коде, которые возвращают пустую строку, если ответ равен null

wrapString(myvar. getName())
Вернет имя или "" то же самое для wrapInt и т. д