2015-10-11 3 views
-1

это мой код для проверки того, существует ли в dgvorders значение (из dgvlist), моя проблема в том, что сообщение об ошибке отображается только для первого выбранного выше списка dgvlist, а остальное все еще добавляет.Значение datagridview уже существует vb

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 
+2

Я не совсем понимаю, что вы делаете, но я уверен, что вы не хотите встраивать петлю dgvOrders в цикле dgvOrders. Вы перебираете квадрат (количество строк) в квадрате. – Crowcoder

+1

Ваш код не имеет 1 проблемы, но немало из них. Я серьезно сомневаюсь, что любой человек, приложивший хоть малейшие усилия, может доставить 10 строк кода VB.NET, включая так много ошибок. – varocarbas

+0

oops, typo error .. его не i = 0 до dgvorders.rows.count, а dgvlist вместо –

ответ

0

Потому что после того, как если заявление вы используете End Sub так, как только сравнивается первая запись, он выходит из всего к югу.

+0

Я попытался удалить выход, но результат к другой ошибке –

+0

Какая ошибка? –

+0

извините, нет ошибки, но когда я удаляю выход, он добавляет ничего, кроме прокрутки datagrid, становится меньше.извините за мою грамматику –

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, потому что мы не хотим, чтобы добавить новую строку, пока мы не проверили все строки.

+0

благодарим вас за ответ, но я уже нашел ошибку. его выход. –

+0

Итак, если проблема с Exit Sub была проблемой, вы должны принять ответ Bharath R, нажав на галочку слева. Или, если бы этот ответ был лучше, вы должны принять этот. Вы также можете выбрать один или оба ответа. –

Смежные вопросы