按照下面的方式每一段代码后面加上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