Datagridview для массива отсутствует одна строка - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть DataGridView с CheckBox первым столбцом.

Я использую следующий Linq, чтобы получить все проверенные строки.

DataGridViewRow[] drs = dgvMain.Rows.Cast<DataGridViewRow>().Where(x =>(!Convert.IsDBNull(x.Cells[0].Value) && Convert.ToBoolean(x.Cells[0].Value))).ToArray();

Но почему-то результат ВСЕГДА отсутствуетпоследняя проверенная строка !!!

НО, если я выберу другой бросок (не проверяя его), перед тем, как запустить строку, появится последняя строка !!!

Может кто-нибудь бытьтак любезно и скажи мне, где я сделал не так!?

Очень ценю !!!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Оказалось, что DataGridView все еще находится в Режим редактирования , когда я запустил код, что означает, что проверка не "окончательная" !

Вот почему Linq не смог его найти!

Поэтому я добавил

dgvMain.EndEdit();

перед запросом Linq и проблема была решена !!!

0 голосов
/ 11 февраля 2019

Вы используете это условие:

!Convert.IsDBNull(x.Cells[0].Value) && Convert.ToBoolean(x.Cells[0].Value)

Использование && это условие должно выполняться как слева, так и справа.

Теперь мой вопрос:

Convert.ToBoolean(x.Cells[0].Value) 
 => not a boolean? where clause return as false.
 => what is the purpose? this code doesn't have a reason anymore. You are just 
 converting it to boolean

Я предлагаю вам попробовать только это:

DataGridViewRow[] drs = dgvMain.Rows.Cast<DataGridViewRow>().Where(x =>(!Convert.IsDBNull(x.Cells[0].Value)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...