我正在尝试对DGV行进行排序,并过滤掉在“雇员”列数组中任何位置都可以找到当前雇员(编号)的行。
我尝试了以下代码;消息框正确显示了第一个循环“ 2”,“ 3”,“ 4”,“ 5” 然后被踢出去?? (即不显示下一个循环“ 3”,“ 5”,“ 6”)
我剩下空白的DGV。
我可以正确处理吗?
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
答案 0 :(得分:0)
问题是您要从同一行的ForEach循环内的数据表中删除行。您不能为此使用foreach循环。
您有两种选择。要删除行,请尝试以下操作:
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
但是您是否真的需要从表中删除行,或者只是不将其显示在DataGridView中?
如果是后者,则只需将dtJobOp设置为您的DataGridView数据源,然后使用:
dtJobOp.Select("your filter expression")
只需选择要查看的内容。当然,这假设您能够将上面的代码转换为一些简单的过滤器表达式,这可能是不可能的。
答案 1 :(得分:0)
(代表问题作者发布了解决方案)。
此答案对我有用:
Private Function OKToDelete(dr As DataRow) As Boolean
Dim ans = True
Dim arr() = Split(dr.Item("Employees").ToString, ",")
For a As Integer = 0 To arr.Length - 1
If arr(a).ToString = number.ToString Then
ans = False
End If
Next a
Return ans
End Function