要求DataGridView返回“已选择单元格的行的索引”,最简单的方法是什么?这与DataGridView.SelectedRows不同。我不允许选择行或列。因此用户必须选择单元格块。我只需要找出哪些行中选择了单元格。
我应该使用一些聪明的lambda表达式吗? 你会怎么做?
如果这有帮助: 在我写的代码中,我已经从DataGridView继承而且我在我自己的自定义类DataGridViewExt中。
答案 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();