获取与模式匹配的第一行索引

时间:2012-10-28 18:42:05

标签: linq datagridview datagridviewrow

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

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

但会引发错误。

我想使用Linq和lambdas。

2 个答案:

答案 0 :(得分:0)

您的解决方案对我很有用。几件事情没有注意到:

  1. 您无需在IEnumberable ToArray上执行Cast
  2. 确保this.colDesired.Index具有有效值。否则会引发运行时异常。
  3. DatagridViewCell.Value的默认值将为null,因此您应该获得适当的格式化值(DatagridViewCell.FormattedValue),具体取决于此处为文本类型的单元格的FormatType来处理null case。
  4. DatagridViewCell.FormattedValue是一个对象,因此您必须先将其转换为字符串。
  5. 这样做:

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

答案 1 :(得分:0)

这应该有效:

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