Почему свойство IsNewRow всегда возвращает false?



У меня есть DataGridView, называемый IncTbl. Я зацикливаюсь на нем и добавляю значение того, что находится в столбце 4, индекс i к переменной yearSalary:



for (int i = 0; i < IncTbl.Rows.Count; i++)
{
if (IncTbl.CurrentRow.IsNewRow) break;
yearSalary += (decimal)IncTbl[4, i].Value;
}


Я не хочу добавлять null, потому что я получу NullReferenceException, поэтому я использую СВОЙСТВО IsNewRow. Однако он возвращает false, даже если это новая строка. Как я могу решить эту проблему?

505   3  

3 ответов:

Вы не единственный человек, который видел подобное поведение. Похоже, что IsNewRow было сообщено как багги в этом сообщении MSDN.

Инцидентально break немного необычен в этом контексте. Вы можете немного изменить свой цикл следующим образом:

 for (int i = 0; i < IncTbl.Rows.Count; i++)
        {
            if (!IncTbl.CurrentRow.IsNewRow)
              yearSalary += (decimal)IncTbl[4,i].Value;
        }

Вы ошиблись IsNewRow. Это справедливо только для строки, которая позволяет пользователю вставлять новые данные. Связанная строка содержит данные базы данных, что означает, что это не новые данные, а сохраненные данные.

Что вам нужно, чтобы избежать NullReferenceException, так это проверить тип строки. Вероятно, строка заголовка все портит...

Смотрите, если это поможет: RowType.

Вы можете сделать такой цикл, например:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
     decimal temp;
     if(!row.IsNewRow && decimal.TryParse(row.Cells[4].Value.ToString(), out temp))
        yearSalary += temp;
}

Comments

    Ничего не найдено.