LINQ根据行中的其他单元格选择DataGridView中的某个单元格

时间:2010-07-20 15:58:00

标签: c# linq datagridview

我是LINQ的新品牌,我正在尝试在我目前的业余爱好项目中使用它。我有一个datagridview,其中每行的第一个单元格是datagridviewcheckbox,第四个单元格是一个字符串。

如果选中该复选框,我需要将第4个单元格的值添加到列表中。

起初我试过了:

var selectedID = from c in multiContactLookup.SelectedCells.Cast<DataGridViewCell>() 
                              select multiContactLookup.Rows[c.RowIndex].Cells[4].Value;

这不起作用,因为已检查的单元格是以编程方式取消选中的,因此c永远不会是值。

然后我尝试了:

var sel2 = from r in multiContactLookup.Rows.Cast<DataGridViewRow>()
                       where r.Cells[0].Value is true select r.Cells[4].Value;

但不知怎的,我的语法错了。

使用LINQ,如何选择检查第一个单元格的行,然后选择第一个单元格的值?我是否必须将其拆分为两个集合?

谢谢!

2 个答案:

答案 0 :(得分:8)

我认为这应该有效:

IEnumerable<string> values = multiContactLookup.Rows.Cast<DataGridViewRow>()
    .Where(row => (bool)row.Cells[0].Value)
    .Select(row => (string)row.Cells[3].Value);

答案 1 :(得分:2)

也许不是你一直在寻找的答案,但是......

DataGridView(因为大多数win-forms控件)不是从LINQ开始的最佳来源。大多数集合都没有实现正确的IEnumerable<T>接口。这就是您需要Cast()解决方法的原因。

通常,尝试将应用程序行为从控件移到数据中。也许您的网格已连接到DataTable。在这种情况下,请注册DataTable的事件以更改数据,并使用DataRow的值,而不是DataGridViewRow及其单元格。