#linq #datagridview
#linq #просмотр сетки данных
Вопрос:
Я пытаюсь использовать следующий запрос linq в моем datagridview:
var count = dgv_Checks.Rows.Cast<DataGridViewRow>()
.Count(row => row.Cells["SubmitToAch"]
.Value.ToString() == "True");
Я разрешаю добавлять в этот datagridview, поэтому внизу есть «добавить строку». Каждый раз, когда он достигает этой строки добавления, он выдает мне «Ссылка на объект, не установленная для экземпляра объекта». Не только в этом запросе, но и в других.
Есть ли способ обрабатывать запросы linq или datagridview так, чтобы он не просматривал эту строку добавления?
Кроме того, как мне исправить приведенный выше запрос, чтобы пропустить эту строку?
Спасибо!
Ответ №1:
Попробуйте добавить нулевую проверку?
var count = dgv_Checks.Rows.Cast<DataGridViewRow>()
.Count(row => row.Cells["SubmitToAch"] != null amp;amp; row.Cells["SubmitToAch"].Value.ToString() == "True");
Комментарии:
1. Это была моя мысль, но я все еще получаю «Ссылка на объект, не установленная для экземпляра объекта». когда я нажимаю на эту строку.
2. Черт возьми, я только что заметил, что я поместил исключения с нулевыми ссылками в качестве сообщения об ошибке в исходном сообщении. Я исправил это … sry.
Ответ №2:
Это должно быть
row.Cells["SubmitToAch"].Value != null
Ответ №3:
Более старый пост, но я чувствую себя обязанным ответить, поскольку та же проблема беспокоила меня ранее сегодня. Решение, предложенное принятым ответом (для проверки на null), по-прежнему приводит к исключению ссылки на объект для меня, но проверка IsNewRow правильно пропустила добавленную строку:
var count = dgv_Checks.Rows.Cast<DataGridViewRow>()
.Count(row => !row.IsNewRow amp;amp; row.Cells["SubmitToAch"].Value.ToString() == "True");