VB.NET DataGridView按回车/Tab查询数据重复添加、新记录不显示问题
问题原因
- 按键判断逻辑错误:
Keys.Enter = 13属于常量判断,返回值永远为真,任何按键都会触发查询逻辑;同时未禁用回车键的默认换行行为,按下回车后当前行自动跳转,导致获取的行数据错位。 - 未读取编辑状态的实时值:DataGridView单元格处于编辑状态时,输入内容暂存在编辑控件中,不会主动同步到单元格的
Value属性,直接读取Cells(0).Value只能拿到上一次提交的旧编码,导致每次查询都返回首次的结果,重复添加记录。 - 缺少触发场景限定:没有判断当前是否处于产品编码列(第一列)的编辑状态,其他列操作也会误触发查询。
解决方案
1. 修正回车键事件逻辑
替换原有dgvdetalle_KeyPress代码,增加编辑提交、默认行为屏蔽逻辑:
Private Sub dgvdetalle_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles dgvdetalle.KeyPress ' 仅当按下回车键、且当前处于第一列(产品编码列)时触发 If Asc(e.KeyChar) = 13 AndAlso dgvdetalle.CurrentCell.ColumnIndex = 0 Then ' 屏蔽回车键默认的换行跳转行为 e.Handled = True ' 主动提交当前编辑内容,同步到单元格Value属性 dgvdetalle.EndEdit() ' 执行查询 mostrarproductosbonus() ' 清空当前输入的编码,跳转到新行的编码列准备下一次输入 dgvdetalle.CurrentRow.Cells(0).Value = "" dgvdetalle.CurrentCell = dgvdetalle.Rows(dgvdetalle.NewRowIndex).Cells(0) End If End Sub
2. 优化产品查询方法
增加非空校验,避免全局DataTable残留旧数据:
Sub mostrarproductosbonus() ' 读取当前输入的产品编码,做空判断 Dim productCode As String = Me.dgvdetalle.CurrentRow.Cells(0).Value?.ToString().Trim() If String.IsNullOrEmpty(productCode) Then Return ' 每次查询初始化新的DataTable,避免旧数据残留 Dim dt As New DataTable() dt = negLog.buscar_pro_parametro(VGlobales.Base, productCode) For Each data As DataRow In dt.Rows Dim aa As Integer = Me.dgvdetalle.Rows.Add() Me.dgvdetalle.Rows(aa).Cells(0).Value = data("IDPRODUCTO").ToString() Me.dgvdetalle.Rows(aa).Cells(1).Value = data("DESCRIPCION").ToString() Next End Sub
3. 可选:支持Tab键触发查询
Tab键不会触发KeyPress事件,如需支持Tab键触发查询,可新增以下重写方法:
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean ' 仅当按下Tab键、且处于第一列编辑状态时触发 If keyData = Keys.Tab AndAlso dgvdetalle.CurrentCell.ColumnIndex = 0 AndAlso dgvdetalle.IsCurrentCellInEditMode Then dgvdetalle.EndEdit() mostrarproductosbonus() dgvdetalle.CurrentRow.Cells(0).Value = "" dgvdetalle.CurrentCell = dgvdetalle.Rows(dgvdetalle.NewRowIndex).Cells(0) ' 屏蔽Tab键默认的单元格跳转行为 Return True End If Return MyBase.ProcessDialogKey(keyData) End Function
内容的提问来源于stack exchange,提问作者kenny
相关产品推荐
相关产品推荐

