如何获取DataGridView的当前行索引?

joo*_*aha 2 c# datagridview winforms

我想要 a 中的当前行DataGridView。不是通过鼠标单击而是按 Enter 键...

我知道这个:

datagridview.CurrentCell.RowIndex
Run Code Online (Sandbox Code Playgroud)

和

datagridview.CurrentRow.Index
Run Code Online (Sandbox Code Playgroud)

和

datagridview.SelectedRows[0].Index
Run Code Online (Sandbox Code Playgroud)

...

我的问题是,通常这工作正常,除非我到达最后一行。因为它总是获取倒数第二行的索引。

知道这是怎么发生的吗?

TaW*_*TaW 6

捕获 a 中的当前行DataGridView确实非常简单,您已经发布了两种工作得很好的方法:

int currentRow = datagridview.CurrentCell.RowIndex;
Run Code Online (Sandbox Code Playgroud)

或者:

int currentRow = datagridview.CurrentRow.Index
Run Code Online (Sandbox Code Playgroud)

第三个实际上是相当有问题的,因为根据当前行的不同,可能SelectionMode不会被选择。DataGridView

但是您的问题来自于尝试获取索引以响应用户按下Enter-key。

默认情况下,如果一行。因此最后一行和其他行之间的行为会有所不同。

如果没有“下”行,则当前单元格将保留在原来的位置,或者如果AllowUserToAddRows为 true,则 DGV 将创建一个新的空行并移动到那里。

因此,如果您总是想获取当前索引而不移动当前单元格,则需要阻止 Enter 键的处理。

这是一种方法:

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // don't pass the enter key on to the DGV:
        e.Handled = true;
        // now store or proecess the index:
        Console.WriteLine(dataGridView1.CurrentRow + "");
    }            
}
Run Code Online (Sandbox Code Playgroud)

用户仍然可以使用光标键四处移动。