以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于集合remove移除失败的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192755) |
-- 作者:13568406997 -- 发布时间:2024/7/19 11:33:00 -- 关于集合remove移除失败的问题 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 -- 发布时间:2024/7/19 11:34:00 -- drs.remove(drRM) 是这个用法不对吗?
|
-- 作者:y2287958 -- 发布时间:2024/7/19 12:03:00 -- drs集合中的元素与实际表中的行不能直接比较 |
-- 作者:有点蓝 -- 发布时间:2024/7/19 12:06:00 -- 不对的。 首先,对于对象型集合,一般不直接通过对象进行移除。最好是通过索引处理 其次,都不是同一个集合的对象。drRM是另外通过SQLFind查询的,对于数据库来说,可能是同一行数据,但是对于程序来说,已经是不同的对象了。SQLFind查询的结果都是独立的,和原有的表对象没有什么关系的。不如使用文字说说上面的代码想做什么功能?
|
-- 作者:13568406997 -- 发布时间: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) |