1

我有一个带有一些列和行的datagridview。其中一列是字符串类型 ( DataGridViewTextBoxColumn)。我想遍历它的所有行DataGridViewTextBoxColumn以找到与特定字符串匹配的第一个元素的索引(行索引),所以我这样做:

int rowIndex = this.dataGridView1.Rows
    .Cast<DataGridViewRow>()
    .ToArray()
    .First(row => row.Cells[this.colDesired.Index].Value == stringToSearch)
    .Index;  

但会引发错误。

我想使用 Linq 和 lambdas。

4

2 回答 2

0

您的解决方案对我很有效。有几点需要注意:

  1. 您不必ToArray对 IEnumberable 执行操作Cast
  2. 确保this.colDesired.Index具有有效值。否则它将引发运行时异常。
  3. 默认值为DatagridViewCell.Valuenull,因此您应该获得一个适当的格式化值 ( DatagridViewCell.FormattedValue),具体取决于FormatType此处为文本类型的单元格,以处理 null 情况。
  4. DatagridViewCell.FormattedValue是一个对象,因此您必须先将其转换为字符串。

做这个:

int rowIndex = dataGridView1.Rows.Cast<DataGridViewRow>().First(row => row.Cells[this.colDesired.Index].FormattedValue.ToString() == stringToSearch).Index; 
于 2012-10-28T18:58:57.133 回答
0

这应该有效:

int rowIndex = this.dataGridView1.Rows.OfType<DataGridViewRow>()
       .First(row => row.Cells[this.colDesired.Index].Value == stringToSearch).Index;  
于 2012-10-28T19:08:58.683 回答