以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关联表显示  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=137604)

--  作者:13775189031
--  发布时间:2019/7/10 14:53:00
--  关联表显示
父表:角钢进料台账
子表:角钢进料表明细
关联列:进料表编号
想实现:子表中“U8出库”均为TRUE,相应父表中“状态_U8出库”自动显示为TRUE
             子表中“未发料数量”均小于等于0,相应父表中“状态_发料完成”自动显示为TRUE
代码要怎么修改?

--  作者:13775189031
--  发布时间:2019/7/10 14:54:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:角钢发料管理台账.foxdb

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:角钢发料管理台账.rar


[此贴子已经被作者于2019/7/10 14:55:07编辑过]

--  作者:有点蓝
--  发布时间:2019/7/10 15:08:00
--  
用法一样,参考着做:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=137425&skin=0
--  作者:13775189031
--  发布时间:2019/7/10 16:03:00
--  
父表:Select Case e.DataCol.name
    Case "进料表编号"
        If e.DataRow.IsNull("进料表编号") Then
            DataTables("角钢进料表明细").DeleteFor("进料表编号=\'" & e.DataRow("进料表编号") & "\'")
            e.DataRow("状态_发料完成") = False
            e.DataRow("状态_U8出库") = False
        Else
            If e.OldValue Is Nothing
                Dim ndr As Row = Tables("角钢进料表明细").AddNew
                ndr("进料表编号") = e.DataRow("进料表编号")
                ndr("工程名称") = e.DataRow("工程名称")
                ndr("塔型") = e.DataRow("塔型")
                ndr.Move(0)
            End If
            Dim cnt As Integer = DataTables("角钢进料表明细").Compute("sum(未发数量)","进料表编号=\'" & e.NewValue  & "\'")
            Dim dr As DataRow
            If cnt <= 0 AndAlso cnt <> Nothing Then
                e.DataRow("状态_发料完成") =(cnt<=0)
                dr = DataTables("角钢进料表明细").Find("进料表编号=\'" & e.DataRow("进料表编号") & "\' and (U8出库=false)")
            End If
            e.DataRow("状态_U8出库") = (cnt<=0 AndAlso dr Is Nothing)
        End If
End Select

子表:Dim dr2 As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "实发支数_1","实发支数_2","实发支数_3","派料支数"
        If dr2.IsNull("派料支数") AndAlso dr2.IsNull("实发支数_1") AndAlso dr2.IsNull("实发支数_2") AndAlso dr2.IsNull("实发支数_3") Then \'如果数量或单价为空
            dr2("未发数量") = Nothing
        Else
            dr2("未发数量") = dr2("派料支数") - dr2("实发支数_1")- dr2("实发支数_2")- dr2("实发支数_3")
        End If
    Case "未发数量","U8出库"
        Dim dr1 As DataRow = DataTables("角钢进料台账").Find("[进料表编号] = \'" & e.DataRow("进料表编号") & "\'")
        If dr1 IsNot Nothing Then
            DataTables("角钢进料台账").DataCols("进料表编号").RaiseDataColChanged(dr)
        End If
End Select

运行时会出现以下提示,需要怎么修改?
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.6.18.1
错误所在事件:表,角钢进料台账, DataColChanged
详细错误信息:
调用的目标发生了异常。
列“状态_U8出库”不属于表 角钢进料表明细。

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.6.18.1
错误所在事件:表,角钢进料台账, DataColChanged
详细错误信息:
调用的目标发生了异常。
列“状态_发料完成”不属于表 角钢进料表明细。


--  作者:狐狸爸爸
--  发布时间:2019/7/10 16:13:00
--  
错误提示已经很清楚了,“状态_U8出库”和状态_发料完成”两列,并不存在于 角钢进料表明细表,也就是列名错了,注意列名和列标题不同,有时你看到的是列标题,并非列名:
http://www.foxtable.com/webhelp/topics/0033.htm


请仔细检查核对


--  作者:13775189031
--  发布时间:2019/7/10 16:31:00
--  
“状态_U8出库”和状态_发料完成”两列是父表里的列,不是子表 角钢进料表明细里的列啊!
参照之前的代码改的,如下:
下面的代码中“履约完成”也是父表里的列,不是子表 管道成套项目采购明细表  里的列,但运行时没问题啊!
不明白啊!
Select Case e.DataCol.name
    Case "物资部预算编号"
        If e.DataRow.IsNull("物资部预算编号") Then
            DataTables("管道成套项目采购明细表").DeleteFor("物资部预算编号=\'" & e.DataRow("物资部预算编号") & "\'")
            e.DataRow("履约完成") = False
        Else
            If e.OldValue Is Nothing
                Dim ndr As Row = Tables("管道成套项目采购明细表").AddNew
                ndr("物资部预算编号") = e.DataRow("物资部预算编号")
                ndr("项目名称") = e.DataRow("项目名称")
                ndr.Move(0)
            End If
            Dim cnt As Integer = DataTables("管道成套项目采购明细表").Compute("sum(未到货数量)","物资部预算编号=\'" & e.NewValue  & "\'")
            Dim dr As DataRow
            If cnt <= 0 Then
                dr = DataTables("管道成套项目采购明细表").Find("物资部预算编号=\'" & e.NewValue  & "\' and (质保书状态=false or 理化检验结果=false)")
            End If
            e.DataRow("履约完成") = (cnt<=0 AndAlso dr Is Nothing)
        End If
End Select
[此贴子已经被作者于2019/7/10 16:31:27编辑过]

--  作者:13775189031
--  发布时间:2019/7/10 16:35:00
--  
确认是列名不是列标题
--  作者:有点蓝
--  发布时间:2019/7/10 16:59:00
--  
应该是代码放错地方了
--  作者:13775189031
--  发布时间:2019/7/11 8:26:00
--  
都在datacolchanged里呀
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:角钢发料管理台账.foxdb

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:角钢发料管理台账.rar
还是麻烦老师帮我看看

父表:角钢进料台账
子表:角钢进料表明细
关联列:进料表编号
想实现:子表中“U8出库”均为TRUE,相应父表中“状态_U8出库”自动显示为TRUE
             子表中“未发料数量”均小于等于0,相应父表中“状态_发料完成”自动显示为TRUE
代码要怎么修改?
[此贴子已经被作者于2019/7/11 8:29:39编辑过]

--  作者:有点蓝
--  发布时间:2019/7/11 9:00:00
--  
子表:

    Case "未发数量","U8出库"
        Dim dr1 As DataRow = DataTables("角钢进料台账").Find("[进料表编号] = \'" & e.DataRow("进料表编号") & "\'")
        If dr1 IsNot Nothing Then
            DataTables("角钢进料台账").DataCols("进料表编号").RaiseDataColChanged(dr1)
        End If
End Select