处理DataGridView中的Enter键
本文关键字:Enter 中的 DataGridView 处理 | 更新日期: 2023-09-27 18:17:55
我有一个5列的datagridview。datagridview中的列是[商品代码,描述,数量,价格&;总].
如何工作:当用户输入itemcode时,应该从数据库中获取描述和价格,并在各自的字段中显示结果。然后由用户输入数量。
我想要的:我想当用户输入值在第一列(项目代码),下一个要选择的单元格应该是第三列(数量)。然后,如果数量输入,用户按下回车键,下一个选定的单元格应该是下一行的第一列(项目代码)。
问题:我已经尝试了几个代码,但它不工作。问题是当在第一列(项目代码)中输入项目代码时,下一个单元格的位置是第三列(数量)的第二行。它应该移动到同一行i的第三列(Quantity)。第一行。
下面是我使用的代码:private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
currentRow = dataGridView1.CurrentCell.RowIndex;
currentColumn = dataGridView1.CurrentCell.ColumnIndex;
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (currentColumn == dataGridView1.Columns.Count - 5)
{
dataGridView1.CurrentCell = dataGridView1[currentColumn + 2, currentRow];
}
else
{
dataGridView1.CurrentCell = dataGridView1[currentColumn - 2, currentRow + 1];
}
}
感谢这篇文章。
我编辑了一点,这里是我的代码工作。
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
icolumn = dataGridView1.CurrentCell.ColumnIndex;
irow = dataGridView1.CurrentCell.RowIndex;
int i = irow;
if (keyData == Keys.Enter)
{
if (icolumn == dataGridView1.Columns.Count - 5)
{
dataGridView1.CurrentCell = dataGridView1[icolumn + 2, irow];
}
else
{
dataGridView1.CurrentCell = dataGridView1[icolumn - 2, irow + 1];
}
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}