我想获取 DataGridViewRow 的索引,其中第一列的值匹配。
到目前为止我的代码:
string SearchForThis = "test";
int index = from r in dgv.Rows
where r.Cells[0].Value == SearchForThis
select r.Index;
编译器错误:
找不到源类型“System.Windows.Forms.DataGridViewRowCollection”的查询模式的实现。找不到“哪里”。考虑显式指定范围变量“r”的类型。
DataGridViewRowCollection
不执行IEnumerable<T>
,这就是为什么你不能使用 LINQ,使用可枚举.Cast http://msdn.microsoft.com/en-us/library/bb341406.aspx方法。
int index = (dgv.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value == SearchForThis)
.Select(r => r.Index)).First();
或者使用查询语法:
int index = (from r in dgv.Rows.Cast<DataGridViewRow>()
where r.Cells[0].Value == SearchForThis
select r.Index).First();
您需要从集合中返回一个结果,这就是我使用的原因First
,但请记住,如果没有符合条件的项目,它将抛出异常。要克服这个问题,请参阅答案末尾的解决方案。
See: Enumerable.Cast<TResult> Method http://msdn.microsoft.com/en-us/library/bb341406.aspx
The Cast<TResult>(IEnumerable)
方法启用标准查询
通过提供在非泛型集合上调用的运算符
必要的类型信息。例如,ArrayList
才不是
实施IEnumerable<T>
,但是通过调用Cast<TResult>(IEnumerable)
on the ArrayList
对象、标准
然后可以使用查询运算符来查询序列。
(您也可以使用Enumerable.OfType
方法,这将忽略所有那些不是DataGridViewRow
,但与DataGridView
,演员也很好)
您还可以使用FirstOrDefault
首先获取行,然后获取索引,如下所示:
int index = 0;
var item = dgv.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells[0].Value == (object)1);
if (item != null)
index = item.Index;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)