DataGridView 中当前选定行的索引

Posted

技术标签:

【中文标题】DataGridView 中当前选定行的索引【英文标题】:Index of Currently Selected Row in DataGridView 【发布时间】:2011-04-04 10:29:02 【问题描述】:

就这么简单。如何获取DataGridView 的当前选定Row 的索引?我不想要 Row 对象,我想要索引 (0 .. n)。

【问题讨论】:

【参考方案1】:
dataGridView1.SelectedRows[0].Index;

或者,如果您想使用 LINQ 并获取所有选定行的索引,您可以这样做:

dataGridView1.SelectedRows.Select(r => r.Index);

【讨论】:

很有帮助(IndexOf 还没有真正“在我的雷达上”),但是因为没有必要获取行,所以需要回旋处。 .Index 方法正是我想要的。【参考方案2】:

在 DGV 的 SelectedRows 集合中使用 Index 属性:

int index = yourDGV.SelectedRows[0].Index;

【讨论】:

你觉得这个更好还是DGV.CurrentCell.RowIndex? 当前单元格在某些情况下可能不会被选中,所以这是更好的方法。 @thethuthinnang 当你没有选择行时,@JayRiggs 的解决方案会抛出索引错误二。你最好用if 包裹它【参考方案3】:

DataGridView 的CurrentCell 属性有RowIndex 属性。

datagridview.CurrentCell.RowIndex

如上处理SelectionChanged事件并找到选中行的索引。

【讨论】:

完美。这似乎最简单/最快,甚至超过 SelectedRows[0].Index。这是一个好的假设吗? 嗯,我没有考虑选择多行。在这种情况下,我不确定当前单元格的行为。 如果是 Excel 之类的,选择的列表可以是多行/多列,但只有一个当前/活动单元格。我只关心当前行,所以这应该没问题。 我知道这篇文章很旧,但它可能对其他人有所帮助:CurrentCell 返回“活动”单元格,这与“选定”不同。即使选择了多行,活动单元格也可能在其他地方,并且只能有一个活动单元格 而且,即使您取消选择数据网格视图中的所有内容,其中一个单元格仍将处于活动状态,因此您不能依赖它为 null 或类似的东西存在未选择任何行。【参考方案4】:

试试DataGridView.CurrentCellAddress。

返回:一个点,表示当前活动单元格的行和列索引。

例如选中第一列第五行,返回:Point( X=1, Y=5 )

【讨论】:

P.S.既然我要了行索引,如果你说DataGridView.CurrentCellAddress.Y ... :) 我认为在这一点上所有这些答案都是有效的,这取决于你要选择哪个最适合你的目的。我建议输入不同的实现并查看 .NET Reflector (red-gate.com/products/reflector) 中的 IL,如果您真的想查看为每个实现生成了什么代码,但正如许多人所说,这是微优化。这真的取决于最明确的意图。 PS 注意以后会更清楚。【参考方案5】:

试试这个它会工作...它会给你所选行索引的索引...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());

【讨论】:

【参考方案6】:
dataGridView1.SelectedRows[0].Index;

在这里找到所有关于datagridview C# datagridview tutorial

琳达

【讨论】:

【参考方案7】:

试试这个

bool flag = dg1.CurrentRow.Selected;

if(flag)

  /// datagridview  row  is  selected in datagridview rowselect selection mode


else

  /// no  row is selected or last empty row is selected

【讨论】:

谢谢,当使用与 gridview 无关的控件时,我需要确定所选行的隐藏值。【参考方案8】:

尝试以下方法:

int myIndex = MyDataGrid.SelectedIndex;

这将给出当前选择的行的索引。

希望对你有帮助

【讨论】:

【参考方案9】:

我修改了@JayRiggs 的答案,这很有效。你需要if,因为有时候SelectedRows可能是空的,所以索引操作会抛出异常。

if (yourDGV.SelectedRows.Count>0)
    int index = yourDGV.SelectedRows[0].Index;

【讨论】:

【参考方案10】:

你可以试试这个代码:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;

【讨论】:

【参考方案11】:

试试看:

int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
MessageBox.Show("Current Row Index is = " + rc.ToString());

希望对你有帮助。

【讨论】:

感谢您的参与,但您的答案与提供解决方案 datagridview.CurrentCell.RowIndex 的所选(也是最受好评的答案)重复。抱歉,我建议将这篇文章作为完整副本删除。【参考方案12】:

如果点击获取行值,我使用:

private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e)
    int rowIndex;
    //rowIndex = e.RowIndex; //Option 1
    //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
    rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3

【讨论】:

以上是关于DataGridView 中当前选定行的索引的主要内容,如果未能解决你的问题,请参考以下文章

从datagridview中选定行的值的ID中获取名称

datagridview

如何取消选择 DataGridView 控件中的所有选定行?

如何在 DataGridView 中获取选定的 DataRow?

Binded DataGridView仅更新当前选定的行

gridview控件,怎么点击选中,获取行的数据?