如何获取 DataGridView 的当前行索引
本文关键字:索引 DataGridView 何获取 获取 | 更新日期: 2024-10-30 13:27:04
我希望当前行在DataGridView
中。不是通过鼠标点击,而是通过按回车键...
我知道这一点:
datagridview.CurrentCell.RowIndex
和
datagridview.CurrentRow.Index
和
datagridview.SelectedRows[0].Index
。
我的问题是,通常这可以正常工作,除非我到达最后一行。因为它总是获取倒数第二行的索引。
知道这是怎么发生的吗?
在DataGridView
中捕获当前行非常简单,您已经发布了两种工作正常的方法:
int currentRow = datagridview.CurrentCell.RowIndex;
或:
int currentRow = datagridview.CurrentRow.Index
第三个实际上相当有问题,因为根据DataGridView
的SelectionMode
,可能无法选择当前行。
但是您的问题来自尝试获取索引以响应用户按下 Enter 键。
默认情况下,这会将当前单元格向下移动一行(如果有)。因此,最后一行和其他行之间的行为会有所不同。
如果没有"下一行",则当前单元格将保留在原处,或者,如果AllowUserToAddRows
为 true,则 DGV 将创建一个新的空行并移动到该行。
因此,如果您始终想在不移动当前单元格的情况下获取当前索引,则需要阻止处理 Enter-key。
这是一种方法:
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 + "");
}
}
用户仍然可以使用光标键四处移动。
如果 DataGridView 配置为允许行添加,则当前的单元格选择有点混乱。
假设有一个包含 5 行有效数据的 DataGridView 控件,并且用户单击第 5 行。然后用户单击第 6 行,新行将添加到显示中,并突出显示第 6 行上的单元格。
但 CurrentCell.RowIndex
和 CurrentRow.Index
仍设置为第 5 行(实际值 = 4),即使 UI 不再显示焦点。
这与鼠标或键盘无关。
我用这样的代码检测这种情况:
bool lastRowSelected = false;
if (grid.SelectedCells != null)
{
foreach (DataGridViewCell cell in grid.SelectedCells)
{
if (cell.RowIndex >= grid.NewRowIndex)
{
lastRowSelected = true;
break;
}
}
}