以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]增加行  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92103)

--  作者:苏州老街
--  发布时间:2016/10/26 11:12:00
--  [求助]增加行
老师好,下面代码报错,增加行时入库单编号还没有生成要日期单元格输入时间后才能生成入库单编号。

Select Case e.DataCol.Name 
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") = False Then \'如果已经输入订单编号
            If e.DataRow.GetChildRows("入库明细").Count = 0 Then \'而且无订单明细
                Dim dr As DataRow = DataTables("入库明细").AddNew()
                dr("入库单编号") = e.DataRow("入库单编号")
            End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2016/10/26 11:57:00
--  
报什么错误?2个表有没有做关联?
--  作者:苏州老街
--  发布时间:2016/10/26 12:45:00
--  

老师,关联了。不是点击确定按钮是对话框关闭按钮。



图片点击可在新窗口打开查看此主题相关图片如下:图像 3.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/10/26 12:47:27编辑过]

--  作者:有点蓝
--  发布时间:2016/10/26 14:14:00
--  
错误提示是入库明细的datacolchanged事件有问题,不是入库单的这个事件
--  作者:苏州老街
--  发布时间:2016/10/26 18:41:00
--  
老师,应该摆在那个事件里。
--  作者:有点蓝
--  发布时间:2016/10/26 20:19:00
--  
不是摆在那个事件的问题。


是入库明细的datacolchanged事件有问题,把入库明细的datacolchanged事件代码贴上来看看

建议先花时间看看开发指南的视频:http://pan.baidu.com/s/1kV8pUwn#list/path=%2F

--  作者:苏州老街
--  发布时间:2016/10/26 20:53:00
--  


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建 文本文档.txt


--  作者:有点蓝
--  发布时间:2016/10/26 21:13:00
--  

按照下面的方式每一段代码后面加上MessageBox.Show,看运行到哪一个MessageBox之后出错了

然后缩小范围在代码段里面加上MessageBox,看是那一句代码有问题

\'自动输入入库单编号明细列的值
Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = \'" & bh  & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大入库单编号
            If max > ""  Then  \'如果存在最大入库单编号
                Dim l As Integer = bh.Length
                idx = CInt(max.Substring(l,3)) + 1  \'获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  \'否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
            
        End If
End Select
MessageBox.Show(1)

\'===============================提取字符=============================================
Dim s As String = e.DataRow("入库单编号明细")
e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)

MessageBox.Show(2)
\'==================================================================================================
Dim ck As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "入库_数量","入库_单价","入库_税率"
        ck("入库_金额") = ck("入库_单价") * ck("入库_数量") / ck("入库_税率")
    Case "入库_单价","入库_数量","入库_金额"
        ck("入库_税金") = ck("入库_单价") * ck("入库_数量") - ck("入库_金额")
    Case "入库_金额","入库_税金"
        ck("入库_价税合计") = ck("入库_金额") + ck("入库_税金")
    Case "运输_数量","运输_单价"
        ck("运输_金额") = ck("运输_数量") * ck("运输_单价")
    Case "入库_价税合计","运输_金额"
        ck("合计金额") = ck("入库_价税合计") + ck("运输_金额")
End Select
MessageBox.Show(3)
\'-----------------------------------------------------------计算库存------------------------------------------
Select Case e.DataCol.Name
    Case "入库单编号明细","入库批次号","入库_数量"
        Dim filter As String = "入库批次号 = \'" & e.DataRow("入库单编号明细") & "\' and 批次号 = \'" & e.DataRow("批次号")  & "\'"
        e.DataRow("库存") = e.DataRow("入库_数量") - DataTables("出库明细").Compute("sum(出库_数量)", filter)
End Select
MessageBox.Show(4)

.......后面的其它段自己补上MessageBox.Show

--  作者:苏州老街
--  发布时间:2016/10/26 21:36:00
--  
老师,那个对话框循环运作关不掉。没有报错.
--  作者:苏州老街
--  发布时间:2016/10/26 21:41:00
--  
老师,好像是这一组代码出错

Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = \'" & bh  & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大入库单编号
            If max > ""  Then  \'如果存在最大入库单编号
                Dim l As Integer = bh.Length
                idx = CInt(max.Substring(l,3)) + 1  \'获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  \'否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
            
        End If
End Select