I am trying to sort through DGV rows and filter out rows where current employee (number) is found anywhere in Employees column array.
I tried below code; messagebox shows correctly first loop "2" "3" "4" 5" then gets kicked out?? (ie doesn't show next loop "3" "5" "6")
I'm left with a blank DGV.
Am I going about this correctly?
Try
Using AdptJobOp As New OleDbDataAdapter(sql, con)
dtJobOp = New DataTable()
AdptJobOp.Fill(dtJobOp)
For Each drJobOp As DataRow In dtJobOp.Rows
arr = Split(drJobOp.Item("Employees").ToString, ",")
For a As Integer = 0 To arr.Length
MessageBox.Show(arr(a).ToString)
If arr(a) = number.ToString Then
count = True
End If
Next a
If count = True Then
dtJobOp.Rows.Remove(drJobOp)
End If
Next drJobOp
End Using
Catch ex As Exception
End Try
Jobop Employees Details
1 2,3,4,5 dsdijfij dfjsdofj
2 3,5,6 ajfsdi jsoifjo siddj
3 6,7,3,8 sajdfssdjf ldj
Search Employees = 5 then resulting DGV should be:
Jobop Employees Details
1 2,3,4,5 dsdijfij dfjsdofj
2 3,5,6 ajfsdi jsoifjo siddj
Search Employees = 2 then resulting DGV should be:
Jobop Employees Details
1 2,3,4,5 dsdijfij dfjsdofj
The problem is that you are removing rows from the datatable inside a ForEach loop of those same rows. You can't use a foreach loop for this.
You have two choices. To remove the rows try something like:
Dim i As Integer = dtJobOp.Rows.Count - 1
While i >= 0
'Where OKToDelete is whatever your code wants to test on
If OKToDelete(dtJobOp.Rows(i)) Then dtJobOp.Rows.Remove(dtJobOp.Rows(i))
'or use dtJobOp.Rows.RemoveAt(i) if you prefer
i -= 1
End While
But do you really need to remove the rows from the table or just not display them in the DataGridView?
If the latter, then just set the dtJobOp as your DataGridView datasource and then use:
dtJobOp.Select("your filter expression")
to simply select what you want to see. This assumes of course you are able to convert your code above into some simple filter expression, which may not be possible.