Предлагаю вам сосредоточиться на каждом предмете по очереди. Вам нужен только один цикл 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
, потому что мы не хотим, чтобы добавить новую строку, пока мы не проверили все строки.
Я не совсем понимаю, что вы делаете, но я уверен, что вы не хотите встраивать петлю dgvOrders в цикле dgvOrders. Вы перебираете квадрат (количество строк) в квадрате. – Crowcoder
Ваш код не имеет 1 проблемы, но немало из них. Я серьезно сомневаюсь, что любой человек, приложивший хоть малейшие усилия, может доставить 10 строк кода VB.NET, включая так много ошибок. – varocarbas
oops, typo error .. его не i = 0 до dgvorders.rows.count, а dgvlist вместо –