Просмотр сетки данных и Linq

#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");