我是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,如何选择检查第一个单元格的行,然后选择第一个单元格的值?我是否必须将其拆分为两个集合?
谢谢!
答案 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
及其单元格。