Попробуйте это, чтобы узнать, сколько раз запускается ваша l oop. Включите Option Strict. Вы тестируете второй столбец в DataTable.
Private Sub OpCode()
Dim counter = 1
For Each row As DataRow In DTShopNameSearch.Rows
If row(1).ToString = txtshop.Text Then
MessageBox.Show(row(1).ToString) 'FOR TESTING
SaveFlag = True
MessageBox.Show($"I am exiting For loop after {counter} iterations.")
Exit For
Else
SaveFlag = False
End If
counter += 1
Next
MessageBox.Show($"For loop is done and there were {counter} iterations.")
End Sub
EDIT
Вот фактический тест, выполненный на моем компьютере. Я немного изменил код. Нет причин повторно устанавливать для SaveFlag значение False. Я не инициализировал счетчик явно. Я использовал локальные данные и имена элементов управления.
Private SaveFlag As Boolean
Private Sub OpCode()
Dim dt = LoadCoffeeTable()
Debug.Print(dt.Rows.Count.ToString)
Dim counter As Integer
SaveFlag = False
For Each row As DataRow In dt.Rows 'DTShopNameSearch.Rows
counter += 1
If row(1).ToString = TextBox1.Text Then
MessageBox.Show(row(1).ToString) 'FOR TESTING
SaveFlag = True
MessageBox.Show($"I am exiting For loop after {counter} iterations.")
Exit For
End If
Next
MessageBox.Show($"For loop is done and there were {counter} iterations.")
End Sub
Private Function LoadCoffeeTable() As DataTable
Dim dt As New DataTable
Using cn As New SqlConnection(My.Settings.CoffeeConnection),
cmd As New SqlCommand("Select Top 10 ID, Name, IsExtraBold, IsFavorite From Coffees", cn)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
Return dt
End Function
Я знаю, что в третьей строке есть столбец «Имя», содержащий «зеленый». Я ввел это TextBox1. Окна сообщений появились, как и ожидалось.