在 datagridview 中验证重复项不一致 vb.net

Inconsistency in Validate duplicates in datagridview vb.net

我在验证数据网格视图中输入的数据时遇到问题,即使我输入不同的代码,它也会为我验证它。

我使用此代码搜索数据网格视图中显示的产品或数据

Private Sub dgvdetalle_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgvdetalle.KeyUp

    dt = negLog.buscar_pro_parametro(VGlobales.Base, Me.dgvdetalle.CurrentRow.Cells(0).Value)

    For Each data As DataRow In dt.Rows
        'Dim aa As Integer = Me.dgvdetalle.Rows.Add()
        ' Me.dgvproductoscanjes.Rows(aa).Cells(0).Value = data("seleccionar").ToString().Trim
        Me.dgvdetalle.CurrentRow.Cells(0).Value = data("IDPRODUCTO").ToString()
        Me.dgvdetalle.CurrentRow.Cells(1).Value = data("DESCRIPCION").ToString()

    Next

End Sub

并在 CellEndEdit datagridview 事件中使用此代码 我做验证。

Private Sub dgvdetalle_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvdetalle.CellEndEdit

    Dim clave As String
    Dim nlinea As Integer
    Select e.ColumnIndex
        Case 0
            clave = dgvdetalle.Rows(dgvdetalle.CurrentRow.Index).Cells(0).Value
            nlinea = dgvdetalle.CurrentRow.Index
            For i As Integer = 0 To dgvdetalle.Rows.Count - 1
                If clave = dgvdetalle.Rows(dgvdetalle.CurrentRow.Index).Cells(0).Value And i <> nlinea Then
                    dgvdetalle.Rows(nlinea).Cells(0).Value = ""
                    MsgBox("esta repetido el codigo")
                    SendKeys.Send("{UP}")
                    Exit Sub
                End If
            Next
    End Select
End Sub

你的问题出在这一行If clave = dgvdetalle.Rows(dgvdetalle.CurrentRow.Index).Cells(0).Value And i <> nlinea Then

clave 将始终等于 dgvdetalle.Rows(dgvdetalle.CurrentRow.Index).Cells(0).Value 因为那是你分配给它的。循环不改变当前行,它只改变 i 的值。 您想将 clavedgvdetalle.Rows(i).Cells(0).Value.ToString 进行比较。

ToString 对于 Option Strict On 应该是必需的。在“编译”选项卡的“项目属性”和“工具”菜单 -> 选项 -> 项目和解决方案 -> VB 默认值中打开它。

我将 Select 案例更改为 If,因为只有一个案例。

Private Sub dgvdetalle_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgvdetalle.CellEndEdit
    Dim clave As String
    Dim nlinea As Integer
    If e.ColumnIndex = 0 Then
        clave = dgvdetalle.Rows(dgvdetalle.CurrentRow.Index).Cells(0).Value.ToString
        nlinea = dgvdetalle.CurrentRow.Index
        For i As Integer = 0 To dgvdetalle.Rows.Count - 1
            If clave = dgvdetalle.Rows(i).Cells(0).Value.ToString And i <> nlinea Then
                dgvdetalle.Rows(nlinea).Cells(0).Value = ""
                MsgBox("esta repetido el codigo")
                SendKeys.Send("{UP}")
                Exit Sub
            End If
        Next
    End If
End Sub