以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]数据转换错误  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=171413)

--  作者:zrb1007
--  发布时间:2021/8/29 11:49:00
--  [求助]数据转换错误
老师,数据转换的时候提示错误,请帮忙看下下面代码什么地方出错了,谢谢


.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2021.8.20.1
错误所在事件:表,入库明细,DataColChanged
详细错误信息:
调用的目标发生了异常。
无法将类型为“System.String”的对象强制转换为类型“System.Collections.Generic.List`1[System.String]”。


Select Case e.DataCol.Name \'入库后用入库明细更新验收验收记录
    Case "入库数量"
        If e.DataRow("未入库数量") < 0 Then
            MessageBox.Show("入库数量不能超过验收数量","请确认")
            e.DataRow("入库数量") = e.DataRow("验收数量")
        Else
            Dim dr As DataRow
            Dim f As String = "到货日期 = #" & e.DataRow("到货日期") & "# and 物资合同编码 = \'" & e.DataRow("物资合同编码") & "\' and 验收日期 = #" & e.DataRow("验收日期") & "#"
            dr = DataTables("验收明细").find(f)
            If dr IsNot Nothing Then
                Dim rqs As List(of String) = dr("过账日期")
                Dim pzs As List(of String) = dr("入库凭证号")
                Dim rq As String = CStr(e.DataRow("过账日期"))
                Dim pz As String = e.DataRow("入库凭证号")
                If rqs.Contains(rq) = False Then \'判断是否存在当前日期
                    rqs.Add(rq)
                End If
                If pzs.Contains(pz) = False Then \'判断是否存在当前凭证
                    rqs.Add(pz)
                End If
                 dr("入库数量") = e.DataTable.Compute("sum(入库数量)",f)
            Else
                MessageBox.Show("验收明细中没找到对应记录,无法更新过账日期/入库凭证号/入库数量信息!")
            End If
        End If
End Select








--  作者:有点蓝
--  发布时间:2021/8/29 20:16:00
--  
                Dim rqs As List(of String) = dr("过账日期")
                Dim pzs As List(of String) = dr("入库凭证号")

一个是日期一个是字符串,无法转换为集合。没看懂要做什么功能,使用文字描述一下

--  作者:chnfo
--  发布时间:2021/8/29 22:25:00
--  
可以考虑用 hashset

 dim rqs as new hashset(of string)  \' Dim rqs As List(of String) = dr("过账日期")   ----这是导致错误的原因。 Dim rqs As new   List(of String) 
 dim pzs as new hashset(of string)   \'Dim pzs As List(of String) = dr("入库凭证号") ----这是导致错误的原因。 Dim pzs As new   List(of String) 
                Dim rq As String = CStr(e.DataRow("过账日期"))
                Dim pz As String = e.DataRow("入库凭证号")
               \' If rqs.Contains(rq) = False Then \'判断是否存在当前日期
                    rqs.Add(rq)
                \'End If
               \' If pzs.Contains(pz) = False Then \'判断是否存在当前凭证
                    rqs.Add(pz)
              \'  End If
                 dr("入库数量") = e.DataTable.Compute("sum(入库数量)",f)
[此贴子已经被作者于2021/8/29 22:26:37编辑过]

--  作者:zrb1007
--  发布时间:2021/8/30 13:29:00
--  回复:(有点蓝)         ...
是想把表A多次的时间,记录到表B的一个单元格中
--  作者:有点蓝
--  发布时间:2021/8/30 13:46:00
--  
Select Case e.DataCol.Name \'入库后用入库明细更新验收验收记录
    Case "入库数量"
        If e.DataRow("未入库数量") < 0 Then
            MessageBox.Show("入库数量不能超过验收数量","请确认")
            e.DataRow("入库数量") = e.DataRow("验收数量")
        Else
            Dim dr As DataRow
            Dim f As String = "到货日期 = #" & e.DataRow("到货日期") & "# and 物资合同编码 = \'" & e.DataRow("物资合同编码") & "\' and 验收日期 = #" & e.DataRow("验收日期") & "#"
            dr = DataTables("验收明细").find(f)
            If dr IsNot Nothing Then
                Dim rqs As List(of String) = dr.Lines("过账日期")
                Dim pzs As List(of String) = dr.Lines("入库凭证号")
                Dim rq As String = CStr(e.DataRow("过账日期"))
                Dim pz As String = e.DataRow("入库凭证号")
                If rqs.Contains(rq) = False Then \'判断是否存在当前日期
                    rqs.Add(rq)
dr.Lines("过账日期") = rqs
                End If
                If pzs.Contains(pz) = False Then \'判断是否存在当前凭证
                    pzs.Add(pz)
dr.Lines("入库凭证号") = pzs
                End If
                 dr("入库数量") = e.DataTable.Compute("sum(入库数量)",f)
            Else
                MessageBox.Show("验收明细中没找到对应记录,无法更新过账日期/入库凭证号/入库数量信息!")
            End If
        End If
End Select