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)
...
我的问题是,通常这工作正常,除非我到达最后一行。因为它总是获取倒数第二行的索引。
知道这是怎么发生的吗?
捕获 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)
用户仍然可以使用光标键四处移动。