Почему свойство 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, даже если это новая строка. Как я могу решить эту проблему?
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