Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# Forms Ссылка на объект не указывает на экземпляр объекта.

Ivan Lis Знаток (289), на голосовании 6 месяцев назад
private new void Update()
{
dataBase.openConnection();

for(int index = 0; index < dataGridView1.Rows.Count; index++)
{
var rowState = (RowState)dataGridView1.Rows[index].Cells[9].Value;

if (rowState == RowState.Existed)
continue;

if (rowState == RowState.Deleted)
{
var id = Convert.ToInt32(dataGridView1.Rows[index].Cells[0].Value);
var deleteQuery = $"delete from iphones where id = {id}";

var command = new SqlCommand(deleteQuery, dataBase.getConnection());
command.ExecuteNonQuery();
}

if (rowState == RowState.Modified)
{
var id = dataGridView1.Rows[index].Cells[0].Value.ToString();
var type = dataGridView1.Rows[index].Cells[1].Value.ToString();
var count = dataGridView1.Rows[index].Cells[2].Value.ToString();
var postavka = dataGridView1.Rows[index].Cells[3].Value.ToString();
var price = dataGridView1.Rows[index].Cells[4].Value.ToString();
var identity_number = dataGridView1.Rows[index].Cells[5].Value.ToString();
var camera = dataGridView1.Rows[index].Cells[6].Value.ToString();
var screen_size = dataGridView1.Rows[index].Cells[7].Value.ToString();
var battery = dataGridView1.Rows[index].Cells[8].Value.ToString();

var changeQuery = $"update iphones set type_of = '{type}', count_of = '{count}', postavka = '{postavka}', price = '{price}', identity_number = '{identity_number}', camera = '{camera}', screen_size = '{screen_size}', battery = '{battery}' where id = '{id}'";

var command = new SqlCommand(changeQuery, dataBase.getConnection());
command.ExecuteNonQuery();
}
}
dataBase.closeConnection();
}
Я сделал кнопку сохранить при нажатии на которую должны сохранять изменения в базе данных MS SQL, я делал все по видео ролику https://www.youtube.com/watch?v=JBUFcMNvEUo , но почему то при нажатии на кнопку сохранить вылазит ошибка Ссылка на объект не указывает на экземпляр объекта. и выделяется строчка var rowState = (RowState)dataGridView1.Rows[index].Cells[9].Value; Помогите пожалуйста решить эту проблему мне надо сдать курсач, можно было бы даже в дискорд кто сможет заранее спасибо.
Голосование за лучший ответ
Сирия Мастер (1350) 7 месяцев назад
К сожалению, ошибка “Ссылка на объект не указывает на экземпляр объекта” часто возникает из-за того, что объекты в коде являются null. Пожалуйста, убедитесь, что ваша переменная dataGridView1 инициализирована и имеет корректные данные. В приведенном коде, она пытается обратиться к ячейке dataGridView1.Rows[index].Cells[9], поэтому также убедитесь, что это непустая ячейка с корректными данными.

Также при сохранении стоит проверить, что dataBase.openConnection() и dataBase.closeConnection() корректно открывают и закрывают соединение с базой данных.

Если проблема остается, рекомендую шаг за шагом пройтись по коду, используя отладчик, чтобы увидеть, какие значения имеют переменные на каждом шаге цикла.
Светлана Колесникова Знаток (306) 7 месяцев назад
Похоже, что у вас проблема с доступом к значению в ячейке Cells[9] объекта DataGridViewRow. Ошибка "Ссылка на объект не указывает на экземпляр объекта" обычно возникает, когда пытаетесь обратиться к объекту, который не был инициализирован.

Для исправления этой проблемы вам нужно убедиться, что в ячейке с индексом 9 всегда будет корректное значение типа RowState, не равное null. Прежде чем обращаться к значению ячейки, вам следует проверить ее на null. Можно сделать это так:


 if (dataGridView1.Rows[index].Cells[9].Value != null) 
{
var rowState = (RowState)dataGridView1.Rows[index].Cells[9].Value;
// Ваш текущий код обработки rowState
}

Также убедитесь, что у вас в коде есть определение перечисления RowState, и что ваш DataGridView имеет колонку, содержащую значения RowState.

Если вы уверены, что все колонки и их значения корректны, и ошибка все равно возникает, возможно, проблема связана с другим местом вашего кода. Дополнительно рекомендуется использовать отладчик, чтобы проанализировать значения переменных во время выполнения программы и выявить источник ошибки.
Ivan LisЗнаток (289) 7 месяцев назад
Добрый вечер сделал как вы сказали. Да, ошибка не выскакивает, но кнопка не сохраняет данные.
Jurijus Zaksas Искусственный Интеллект (440578) 7 месяцев назад
Что-то вот из этого:

dataGridView1.Rows[index].Cells[9].Value

возвращает нулевой указатель. Что именно - нам отсюда не видно, пользуйся дебаггером.
Похожие вопросы