这是我的代码,用于检查dgvorders中是否已存在一个值(来自dgvlist),我的问题是仅显示dgvlist的第一个选择行的错误消息,其余的仍然添加。
For Each row As DataGridViewRow In dgvOrders.Rows
For i = 0 To dgvOrders.Rows.Count - 1
If row.Cells(0).Value = dgvList.SelectedRows(i).Cells(0).Value Then
MsgBox("item already listed!", MsgBoxStyle.Critical)
Else : dgvOrders.Rows.Add(v, w, x, y, z)
End If
Exit Sub
Exit For
Next
Next
答案 0 :(得分:0)
因为在If语句之后你正在使用End sub所以一旦比较了第一条记录,它就会从整个sub中出来。
答案 1 :(得分:0)
我建议你依次关注每个项目。您只需要一个For Each ... Next
循环(除非您还想遍历列)。
接下来获取值以测试变量ValueFromdgvList
。它应声明为与预期值匹配的数字或字符串。我不知道下面的代码中是否有正确的语法或正确的值。您应该在代码中放置一个断点并逐步执行,以便在开始比较之前检查您是否具有预期值。
最后要添加一行,您需要将值设置为数组。更好的方法是定义一个新的DataGridViewRow并将值添加到其中。最后将它添加到DataGridView。但我会离开那。
'change this as needed
Dim ValueFromdgvList As String = dgvList.SelectedRows(0).Cells(0).Value
Debug.Print(ValueFromdgvList)
Dim haveMatch As Boolean
For Each row As DataGridViewRow In dgvOrders.Rows
If row.Cells(0).Value = ValueFromdgvList Then
haveMatch = True
Exit For
End If
Next
If haveMatch Then
MsgBox("item already listed!", MsgBoxStyle.Critical)
Else
Dim ValuesArray() As Object = {v, w, x, y, z}
dgvOrders.Rows.Add(ValuesArray)
End If
我们正在使用haveMatch
,因为在检查完所有行之前,我们不想添加新行。