Member 13587594 Ответов: 3

Datagridview в массиве отсутствует одна строка.


У меня есть Практическое руководство с собой флажок первая колонка.

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

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


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

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

Не мог бы кто-нибудь быть таким добрым и сказать мне, где я сделал что-то не так?!

Очень ценю это!!!

Что я уже пробовал:

Я проверил все виды состояния, где это было безрезультатно!

RickZeeland

Является ли последняя строка пустой или она имеет нулевое значение ?

George Swan

Мне кажется, что последняя строка должна быть в "режиме редактирования", когда вы запускаете запрос. Вот почему, когда вы выбираете другую строку, проблема решается.

3 Ответов

Рейтинг:
1

Member 13587594

Георгий лебедь-это правильно! DataGridView все еще находится в режиме редактирования!

Итак, добавление

dgvMain.EndEdit();
до того, как Linq решил эту проблему!


Рейтинг:
0

OriginalGriff

Мы не можем сказать: это, скорее всего, зависит от ваших данных, и у нас нет никакого доступа к ним.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Изучите содержимое источника данных и выясните, что именно он будет обрабатывать. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему. Посмотрите на массив и посмотрите, что именно он содержит.

Извините, но мы не можем этого сделать для вас - пришло время освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

Gajendra Jangid

Просмотрите Этот Код:

DataTable dt = new DataTable();
            dt.Columns.Add("A", typeof(Boolean));
            dt.Columns.Add("B", typeof(string));
            dt.Rows.Add(true,"A");
            dt.Rows.Add(true, "B");
            dt.Rows.Add(false, "C");
            dt.Rows.Add(true, "D");
            dt.Rows.Add(false, "E");
            dgvMain.DataSource = dt;

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


OriginalGriff

Причина, по которой я голосую за одного: не ответ.
Это ничего не показывает - если бы последняя строка была "true", "E", это могло бы продемонстрировать, что код работает, но с "false", " E " он точно показывает, о чем говорит пользователь, и ничего не добавляет к обсуждению.