在Datagridview中按Enter键移动到下一个单元格
本文关键字:下一个 单元格 移动 Datagridview 中按 Enter | 更新日期: 2023-09-27 17:49:43
我有一个DataGridView
,每当按ENTER键时,我就从一个单元格移动到另一个单元格。
我已经设法找到解决方案,当单元格在编辑模式,而不是在编辑模式。
我面临的问题是,当用户在最后一行,而他正在编辑一个单元格,然后按ENTER键,一个事件没有触发(selectionChanged
),单元格没有离开焦点。它只是从编辑模式退出。这很奇怪,因为它只发生在最后一行。所有其他行都按预期工作。
我使用2个事件,以便在单元格处于编辑模式时按Enter键移动到下一个单元格。
private void dgvTT_SelectionChanged(object sender, EventArgs e)
{
if (MouseButtons != 0) return;
if (_celWasEndEdit != null && dgvTT.CurrentCell != null)
{
// if we are currently in the next line of last edit cell
if (dgvTT.CurrentCell.RowIndex == _celWasEndEdit.RowIndex + 1 &&
dgvTT.CurrentCell.ColumnIndex == _celWasEndEdit.ColumnIndex)
{
int iColNew;
int iRowNew = 0;
if (_celWasEndEdit.ColumnIndex >= colMaam.Index)
{
iColNew = colMisparHeshbon.Index;
iRowNew = dgvTT.CurrentCell.RowIndex;
}
else
{
iColNew = dgvTT.Columns.GetNextColumn(_celWasEndEdit.OwningColumn, DataGridViewElementStates.Displayed, DataGridViewElementStates.None).Index;
iRowNew = _celWasEndEdit.RowIndex;
}
dgvTT.CurrentCell = dgvTT[iColNew, iRowNew];
}
}
_celWasEndEdit = null;
}
private void dgvTT_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
_celWasEndEdit = dgvTT[e.ColumnIndex, e.RowIndex];
}
有什么建议吗?
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
int iColumn = dataGridView1.CurrentCell.ColumnIndex;
int iRow = dataGridView1.CurrentCell.RowIndex;
if (iColumn == dataGridView1.Columns.Count - 1)
dataGridView1.CurrentCell = dataGridView1[0, iRow + 1];
else
dataGridView1.CurrentCell = dataGridView1[iColumn + 1, iRow];
}
}
catch { }
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns.Count - 1)
{
dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells[0];
}
else
{
SendKeys.Send("{UP}");
SendKeys.Send("{left}");
}
}