第一个问题,检查结果表确实没有增加,调整了红色代码的位置,也就是样品编号最后赋值,就可以了:
If e.DataCol.Name = "检测项目" Then
Tables("检测流程流转记录表").StopRedraw
Dim s As String = e.DataRow("检测项目")
Dim s1 As String = e.DataRow("样品编号")
DataTables("检测流程流转记录表").DeleteFor("[样品编号]= '" & s1 & "' And [发放记录表日期] Is null")
If s <> "" And s1 <> "" Then
Dim Values() As String = s.Split(",")
For i As Integer = 0 To Values.Length - 1
Dim Arys As List(Of String())
Arys = DataTables("项目管理").GetValues("检测依据|公开报价","流转项目 = '" & Values(i) & "'")
For Each Ary As String() In Arys
'Dim dr As DataRow
'dr = DataTables("检测流程流转记录表").Find("样品编号 = '" & s1 & "' and 检测项目 = '" & Values(i) & "'")
'If dr Is Nothing Then
'
Dim r As Row = Tables("检测流程流转记录表").AddNew()
r("检测依据") = Ary(0)
r("公开报价") = Ary(1)
r("检测项目") = Values(i)
r("样品编号") = s1
'End If
Next
Next
End If
Tables("检测流程流转记录表").ResumeRedraw
End If
Select Case e.DataCol.name
Case "样品编号"
Dim dr As DataRow = DataTables("样品出入库登记表").Find("样品编号 = '" & e.OldValue & "'")
If dr Is Nothing Then
dr = DataTables("样品出入库登记表").AddNew()
End If
dr("样品编号") = e.DataRow("样品编号")
End Select
理由涉及到逻辑问题,因为样品编号变化,导致样品项目变化,触发流转记录表的DataColChanged事件,如果其他列此时没有内容,即使触发事件也没有值供填充到检查结果表,所以只有等其他列的值全部写入了,最后再写样品编号列的内容。
其实这种问题,你可以用这个方法来分析:
http://www.foxtable.com/help/topics/1485.htm
一下子就知道原因了:事件触发了,但是GetValues没有取到值,自己分析比较方便,因为你知道具体的业务逻辑,别人就费力多了,要根据你的代码理清楚前后逻辑才能分析。
[此贴子已经被作者于2014-3-25 11:47:10编辑过]