Foxtable(狐表)用户栏目专家坐堂 → 关于集合remove移除失败的问题


  共有1783人关注过本帖树形打印复制链接

主题:关于集合remove移除失败的问题

帅哥哟,离线,有人找我吗?
13568406997
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3486 威望:0 精华:0 注册:2021/8/9 10:30:00
关于集合remove移除失败的问题  发帖心情 Post By:2024/7/19 11:33:00 [只看该作者]

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集合中移除指定仓库名称的记录,但试了多次,移除前后记录的总数没有变化,唯一码是肯定存在的


 回到顶部
帅哥哟,离线,有人找我吗?
13568406997
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3486 威望:0 精华:0 注册:2021/8/9 10:30:00
  发帖心情 Post By:2024/7/19 11:34:00 [只看该作者]

drs.remove(drRM) 


是这个用法不对吗?

 回到顶部
帅哥,在线噢!
y2287958
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4773 积分:34673 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2024/7/19 12:03:00 [只看该作者]

drs集合中的元素与实际表中的行不能直接比较

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111411 积分:567125 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/19 12:06:00 [只看该作者]

不对的。

首先,对于对象型集合,一般不直接通过对象进行移除。最好是通过索引处理
其次,都不是同一个集合的对象。drRM是另外通过SQLFind查询的,对于数据库来说,可能是同一行数据,但是对于程序来说,已经是不同的对象了。SQLFind查询的结果都是独立的,和原有的表对象没有什么关系的。

不如使用文字说说上面的代码想做什么功能?

 回到顶部
帅哥哟,离线,有人找我吗?
13568406997
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3486 威望:0 精华:0 注册:2021/8/9 10:30:00
  发帖心情 Post By:2024/7/19 12:26:00 [只看该作者]

有个别仓库的产品,在出库时不扣除标配附件的库存量,要把这些数据排除在外

已经把代码修改成下面这样了,正在调试:


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)


 回到顶部