在 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
的值。
您想将 clave
与 dgvdetalle.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
我在验证数据网格视图中输入的数据时遇到问题,即使我输入不同的代码,它也会为我验证它。
我使用此代码搜索数据网格视图中显示的产品或数据
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
的值。
您想将 clave
与 dgvdetalle.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