Практическое руководство поиск петлю
Я хочу найти throw DataGridView, если я нахожу ячейку в записи, начинающуюся с "51", сделать что-то, если звезды с "52" делают что-то, если начинается с" 53 " что-то
код работает если записи являются ордерами типа 51 52 53 но если это 51 51 52 52 53 он выбирает первую запись и останавливается
Я хочу, чтобы он выбрал первую запись, которая начинается с (51), (52),(53) если таковые имеются
это код
<pre>Public Sub StartAllSend() Dim currRowNum As String Dim currRowAmount As String Dim currVRowNum As String Dim currVRowAmount As String Dim currERowNum As String Dim currERowAmount As String Dim r As Integer Dim SrCell As String <pre>If InvoiceDataGridView.Rows.Count > 1 Then For Each row As DataGridViewRow In InvoiceDataGridView.Rows If Not row.IsNewRow Then SrCell = InvoiceDataGridView.Rows(r).Cells(1).Value If SrCell <> "" Then If SrCell.StartsWith("51") Then If txtMobiNorNumber.Text = "" And cmdUSSD.Enabled = True Then 'InvoiceDataGridView.Rows(r).Selected = True lblMNo.Text = 0 currRowAmount = InvoiceDataGridView.CurrentRow.Cells(3).Value currRowNum = InvoiceDataGridView.CurrentRow.Cells(1).Value currRowUser = "Buy" currRowUserID = InvoiceDataGridView.CurrentRow.Cells(0).Value txtMobiNorNumber.Text = currRowNum cboMobiNorAmount.Text = (Int(currRowAmount)) InvoiceDataGridView.Rows.Remove(InvoiceDataGridView.Rows(r)) End If ElseIf SrCell.StartsWith("52") Then If txtMobiNorNumber2.Text = "" And cmdUSSD2.Enabled = True Then 'InvoiceDataGridView.Rows(r).Selected = True lblVNo.Text = 0 currVRowAmount = InvoiceDataGridView.CurrentRow.Cells(3).Value currVRowNum = InvoiceDataGridView.CurrentRow.Cells(1).Value currVRowUser = "Sell" currVRowUserID = InvoiceDataGridView.CurrentRow.Cells(0).Value txtMobiNorNumber2.Text = currVRowNum cboMobiNorAmount2.Text = (Int(currVRowAmount)) InvoiceDataGridView.Rows.Remove(InvoiceDataGridView.Rows(r)) End If ElseIf SrCell.StartsWith("53") Then If txtMobiNorNumber3.Text = "" And cmdUSSD3.Enabled = True Then ' InvoiceDataGridView.Rows(r).Selected = True lblENo.Text = 0 currERowAmount = InvoiceDataGridView.CurrentRow.Cells(3).Value currERowNum = InvoiceDataGridView.CurrentRow.Cells(1).Value currERowUser = "Empty" currERowUserID = InvoiceDataGridView.CurrentRow.Cells(0).Value txtMobiNorNumber3.Text = currERowNum cboMobiNorAmount3.Text = (Int(currERowAmount)) InvoiceDataGridView.Rows.Remove(InvoiceDataGridView.Rows(r)) End If End If End If End If Next End If End Sub<pre> What I have tried: I want it to select the First record that Starts with (51), (52),(53) if there any
Michael_Davies
SrCell всегда является первой ячейкой того, что r есть, r не должно быть ничем, поскольку оно не было назначено. Вы также используете r, чтобы установить selected = true, r еще не имеет значения, row делает это, вам не нужно выбирать строку, если вы не собираетесь этого делать, и знайте, что событие сработает, когда вы это сделаете, и любой обработчик будет вызван.
Если InvoiceDataGridView.Строк.Тогда посчитайте > 1
Для каждой строки, а ячейки datagridviewrow в InvoiceDataGridView.Строк
Если не грести.IsNewRow Тогда
SrCell = строка.Ячейки (1). Значение
ряд.Selected = True ' вам не нужно этого делать, Используйте row вместо InvoiceDataGridView.CurrentRow через остальную часть вашего кода, это ускорит процесс
Не уверен в эффекте удаления строк во время итерации, поскольку это изменяет коллекцию, которая повторяется, лично я бы сделал это как индекс, установленный на шаг count -1 до 0 -1;
Для R = InvoiceDataGridView.Строк.Отсчет от -1 до 0 шаг -1
...
currRowAmount = InvoiceDataGridViewRow (r).Ячейки (3). Значение
...
Следующий
Затем вы можете использовать r в качестве индекса для строк, и удаление строки не повлияет на цикл, так как он идет назад.
GalaxyMan
Я изменил код, но все равно тот же
просто возьмите первую пластинку и остановитесь
например
первая запись звезды с (51)
Второй (51)
третий (52)
он берет первую (51) запись и не берет первую (52) запись
CHill60
Предназначена ли эта функция StartAllSend () для поиска по всей сетке или она вызывается откуда-то еще? Если это вызывается для каждой строки в сетке, то вы будете перезаписывать текст в текстовых полях при перемещении по сетке.
Возможно, вам лучше объяснить, что вы хотите сделать, потому что этот код вообще не имеет никакого смысла
GalaxyMan
он должен просто взять только первый ряд начинается с (51),(52),(53)