You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置销售录入DataGridView的Tab切换顺序及自动新增行

嘿,这个需求我之前做销售录入系统的时候刚好实现过,完全可以通过拦截Tab键事件和单元格编辑完成事件来搞定,下面是具体的实现步骤和代码:

核心实现思路
  • 拦截Tab键:当用户在itemcode、itemname或barcode列按下Tab时,强制跳转到当前行的quantity列,替代默认的Tab列切换行为
  • 自动新增行:当用户完成quantity列的编辑后,直接在DataGridView末尾新增一行,方便继续录入
具体代码实现(以C# WinForms为例)

首先,给你的DataGridView绑定KeyDown事件,用来处理Tab键的自定义跳转:

private void dataGridView_Sales_KeyDown(object sender, KeyEventArgs e)
{
    // 只处理编辑状态下的Tab键
    if (e.KeyCode == Keys.Tab && dataGridView_Sales.IsCurrentCellInEditMode)
    {
        string currentColumnName = dataGridView_Sales.CurrentCell.OwningColumn.Name;
        
        // 判断当前是否在目标列中
        if (currentColumnName == "itemcode" || currentColumnName == "itemname" || currentColumnName == "barcode")
        {
            // 定位到当前行的quantity列
            int quantityColIndex = dataGridView_Sales.Columns["quantity"].Index;
            dataGridView_Sales.CurrentCell = dataGridView_Sales[quantityColIndex, dataGridView_Sales.CurrentRow.Index];
            
            // 阻止默认Tab行为,避免跳到下一列
            e.Handled = true;
        }
    }
}

然后,绑定CellEndEdit事件,实现quantity列编辑完成后自动新增行:

private void dataGridView_Sales_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    // 确认当前编辑的是quantity列
    if (dataGridView_Sales.Columns[e.ColumnIndex].Name == "quantity")
    {
        int currentRowIndex = e.RowIndex;
        
        // 如果是未绑定数据源的DataGridView,直接新增行
        if (currentRowIndex == dataGridView_Sales.Rows.Count - 1)
        {
            dataGridView_Sales.Rows.Add();
        }
        else
        {
            // 如果绑定了数据源(比如DataTable),要给数据源添加新行
            // 示例:假设数据源是DataTable salesDt
            // DataRow newRow = salesDt.NewRow();
            // salesDt.Rows.Add(newRow);
            
            // 新增后可以自动定位到新行的第一个列,方便继续录入
            dataGridView_Sales.CurrentCell = dataGridView_Sales[0, dataGridView_Sales.Rows.Count - 1];
            dataGridView_Sales.BeginEdit(true);
        }
    }
}
关键注意事项
  • 确保你的DataGridView列的Name属性和代码里的一致(比如itemcode、quantity),不然会找不到对应列
  • 如果你的DataGridView绑定了数据源(比如DataTable),不要直接调用Rows.Add(),要操作数据源来新增行,否则会引发异常
  • 记得在窗体构造函数或者设计器里绑定这两个事件:
public SalesForm()
{
    InitializeComponent();
    // 手动绑定事件(如果设计器里没绑定的话)
    dataGridView_Sales.KeyDown += dataGridView_Sales_KeyDown;
    dataGridView_Sales.CellEndEdit += dataGridView_Sales_CellEndEdit;
}

内容的提问来源于stack exchange,提问作者Khaleel R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:52:57