DataGridView中当前选定行的索引


96

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

Answers:


165

有DataGridView RowIndex属性的CurrentCell属性。

datagridview.CurrentCell.RowIndex

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


1
完善。即使在SelectedRows [0] .Index上,这似乎也是最简单/最快的。这是一个很好的假设吗?
ErikE

嗯,我没有想到要选择多个行。在这种情况下,我不确定当前单元格的行为。
fletcher 2010年

1
如果是Excel之类的内容,则所选列表可以有许多行/列,但是只有一个当前/活动单元格。我只关心当前行,所以应该可以。
ErikE

18
我知道这篇文章很旧,但可能会对其他人有所帮助:CurrentCell返回“活动”单元格,该单元格与“已选择”不同。即使选择了多行,活动单元也可能在其他位置,并且只能有一个活动单元
Luke Marlin 2013年

3
而且,即使您取消选择了数据网格视图中的所有内容,其中一个单元仍将处于活动状态,因此您不能依靠它为null或类似的内容来选择行。
丹尼尔·格雷

37

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

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

您认为这更好还是DGV.CurrentCell.RowIndex?
ErikE

4
在某些情况下可能不会选择当前单元格,因此这是更好的选择。
Little Endian

1
@thethuthinnang没有选择任何行时,@ JayRiggs的解决方案将抛出索引错误2。您最好用if
艾伦·鲁恩

7
dataGridView1.SelectedRows[0].Index;

或者,如果您想使用LINQ并获取所有选定行的索引,则可以执行以下操作:

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

很有帮助(IndexOf还不是真的“在我的雷达范围内”),但是由于不需要行而绕行。我一直在寻找.Index方法。
ErikE


3

尝试它会起作用...它将为您提供所选行索引的索引...

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

2

试试这个

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不相关的控件时所选行的隐藏值。
orgtigger 2014年

2

我修改了@JayRiggs的答案,这可行。您需要使用,if因为有时SelectedRows可能为空,所以索引操作将引发异常。

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

1

尝试使用DataGridView.CurrentCellAddress

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

EG选择第一列和第五行,您将返回:Point(X = 1,Y = 5)


附注:自从我要求行索引以来,如果您说DataGridView.CurrentCellAddress.Y... :)
ErikE 2010年

我认为目前所有这些答案都是有效的,这取决于您要选择哪种最干净的目的。如果您确实想查看每个实现生成的代码,我建议您键入不同的实现并查看.NET Reflector(red-gate.com/products/reflector)中的IL ,但是正如许多人会说的那样,这很微妙。 -优化。实际上,这要归结于最明确的意图。PS注意事项在以后会更加清晰。
Kilanash

1

试试吧:

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

希望对您有帮助。


3
感谢您参与,但是您的答案是给出解决方案的所选(也是最受支持的答案)的重复datagridview.CurrentCell.RowIndex。抱歉,我建议删除此帖子,将其全文删除。
ErikE

0

您可以尝试以下代码:

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

0

我使用了如果单击获取行值:

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
}

-1

请尝试以下操作:

int myIndex = MyDataGrid.SelectedIndex;

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

希望这可以帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.