Fadimoh Ответов: 3

Столбец Sum datagridview


System.NullReferenceException: 'ссылка на объект не установлена на экземпляр объекта'.

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

int sumc1 = 0;
            for (int x = 0; x < dataGridView1.Rows.Count; x++)
            {
                if (dataGridView1.Rows[x].Cells[6].Value.ToString() == "QP26")
                {
                    sumc1 += Convert.ToInt32(dataGridView1.Rows[x].Cells[7].Value);
                }
            }
            this.label3.Text = sumc1.ToString();

3 Ответов

Рейтинг:
2

Maciej Los

Мое лучшее предположение-это та линия:

sumc1 += Convert.ToInt32(dataGridView1.Rows[x].Cells[7].Value);

вызывает ошибку 'Object reference not set to an instance of an object.'
Вы не можете конвертировать null к integer Таким образом, вы должны добавить условие, которое будет проверять, является ли ячейка.Значение не равно null.


Fadimoh

Спасибо за вашу поддержку,
Тот же вопрос

Я сталкиваюсь с проблемой в этой линии

if (dataGridView1.Rows[x].Cells[6].Value.ToString() == "QP26")

Maciej Los

Как я уже упоминал, сначала вы должны проверить наличие null.

Рейтинг:
1

jrodes

То, что я сделал бы с linq, это что-то вроде:

int sumc1 = 0;

 sumc1 = dataGridView1.Rows.Cast<DataGridViewRow>()
     .Where(z=>z.Cells[7].Value.ToString() == "QP26")
     .Sum(s => Convert.ToInt32(s.Cells[7].Value));

 this.label3.Text = sumc1.ToString();


Fadimoh

Спасибо за вашу поддержку,
Тот же вопрос

Я сталкиваюсь с проблемой в этой линии

if (dataGridView1.Rows[x].Cells[6].Value.ToString() == "QP26")

phil.o

Rows.Cast<DataGridViewRow> вероятно, это бесполезно, так как строки уже выставляют коллекцию DataGridViewRow.

.Where(r => r.Cells[7].Value != null) вероятно, это тоже бесполезно, так как предыдущее Where уже выбраны ячейки с определенным значением, которое не является нулевым, так как оно равно "QP26".

Maciej Los

Ну что ж, есть обязательный зов Cast<DataGridViewRow>() метод.
Я согласен со второй частью твоего комментария, Фил.

phil.o

Я вижу: DataGridViewRowCollection определяется только для реализации IList, таким образом, приведение. Моя ошибка.

Maciej Los

:большой палец вверх:

Рейтинг:
0

jrodes

попробуйте добавить в начале еще одно место... (я полагаю, что у вас есть NullPointException)

.Where(o=>o.Cells[7].Value!=null)