Dim drs As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim lst As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim dr不扣 As DataRow = DataTables("系统重要参数").SQLFind("数值名称='在库船不扣除标配附件的仓库名称'")
Dim str不扣仓库 As String
If dr不扣 IsNot Nothing Then
str不扣仓库 = dr不扣("当前值")
End If
'MessageBox.Show(2)
Dim 不扣仓库() As String = str不扣仓库.Split(",")
'将已经登记为不扣的仓库中的船排除
MessageBox.Show("移除前drs.count=" & drs.count)
For Each s As String In 不扣仓库
' MessageBox.Show(s)
For Each dr As DataRow In lst
Dim drKC As DataRow = DataTables("vw_库存查询表").SQLFind("库存号='" & dr("库存号") & "'")
If drKC IsNot Nothing Then
If drKC("仓库名称") = s Then
Dim drRM As DataRow = DataTables("可出货船").SQLFind("唯一码='" & dr("唯一码") & "'")
If drRM IsNot Nothing Then
' MessageBox.Show("移除" & dr("唯一码"))
drs.remove(drRM)
End If
End If
Else
drs.remove(dr) '库存不存在
End If
Next
Next
MessageBox.Show("移除后drs.count=" & drs.count)
想从drs集合中移除指定仓库名称的记录,但试了多次,移除前后记录的总数没有变化,唯一码是肯定存在的
不对的。
首先,对于对象型集合,一般不直接通过对象进行移除。最好是通过索引处理
其次,都不是同一个集合的对象。drRM是另外通过SQLFind查询的,对于数据库来说,可能是同一行数据,但是对于程序来说,已经是不同的对象了。SQLFind查询的结果都是独立的,和原有的表对象没有什么关系的。
不如使用文字说说上面的代码想做什么功能?
有个别仓库的产品,在出库时不扣除标配附件的库存量,要把这些数据排除在外
已经把代码修改成下面这样了,正在调试:
Dim drs As New List(Of DataRow)
Dim lst As List(Of DataRow) = DataTables("可出货船").SQLSelect("已扣除标配附件<>'true' and 是否在库='true'")
Dim dr不扣 As DataRow = DataTables("系统重要参数").SQLFind("数值名称='在库船不扣除标配附件的仓库名称'")
Dim str不扣仓库 As String
If dr不扣 IsNot Nothing Then
str不扣仓库 = dr不扣("当前值")
End If
'MessageBox.Show(2)
Dim 不扣仓库 As New list(Of String)
'将已经登记为不扣的仓库中的船排除
MessageBox.Show("移除前drs.count=" & drs.count)
For Each s As String In str不扣仓库.Split(",")
不扣仓库.add(s)
Next
For Each dr As DataRow In lst
Dim drKC As DataRow = DataTables("vw_库存查询表").SQLFind("库存号='" & dr("库存号") & "'")
If drKC IsNot Nothing Then
If 不扣仓库.Contains(drKC("仓库名称")) = False Then
Dim drRM As DataRow = DataTables("可出货船").SQLFind("唯一码='" & dr("唯一码") & "'")
If drRM IsNot Nothing Then
Output.Show("添加 " & dr("唯一码"))
drs.add(drRM)
End If
End If
End If
Next
MessageBox.Show("移除后drs.count=" & drs.count)