0

我有DataGridView一个CheckBox第一列。

我使用以下 Linq 来获取所有选中的行。

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

但不知何故,结果总是缺少最后检查的行!!!

但是,如果我选择另一个卷(不检查它),在我运行该行之前,最后一行出现了!!!

有人可以这么好心告诉我我哪里做错了吗!?

非常感激!!!

4

2 回答 2

0

您正在使用此条件:

!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)))
于 2019-02-11T06:58:33.947 回答
0

原来,当我运行代码时,它DataGridView仍然处于编辑模式,这意味着检查不是“最终的”

这就是Linq找不到它的原因!

所以我加了

dgvMain.EndEdit();

在Linq查询之前,问题就解决了!!!

于 2019-02-11T08:01:58.513 回答