C# - DataGridView和SelectedCells - 查找所选单元格的行索引

时间:2009-11-04 16:14:09

标签: c# .net winforms datagridview

要求DataGridView返回“已选择单元格的行的索引”,最简单的方法是什么?这与DataGridView.SelectedRows不同。我不允许选择行或列。因此用户必须选择单元格块。我只需要找出哪些行中选择了单元格。

我应该使用一些聪明的lambda表达式吗? 你会怎么做?

如果这有帮助: 在我写的代码中,我已经从DataGridView继承而且我在我自己的自定义类DataGridViewExt中。

2 个答案:

答案 0 :(得分:9)

LINQ解决方案:

var rowIndexes = dgv.SelectedCells.Cast<DataGridViewCell>()
                                  .Select(cell => cell.RowIndex)
                                  .Distinct();

修改

你刚刚错过了Cast。这是必需的,因为DataGridViewSelectedCellCollection不实现通用IEnumerable<DataGridViewCell>,只是IEnumerable,因此当您枚举值时,它们的类型为Object。使用演员表,这将给出:

int[] rowIndexes = (from sc in this.SelectedCells.Cast<DataGridViewCell>() 
                    select sc.RowIndex).Distinct().ToArray();

答案 1 :(得分:1)

IEnumerable<int> indexes = 
 (from c in dataGridView1.SelectedCells.Cast<DataGridViewCell>()
  select c.RowIndex).Distinct();