以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  datacolchanged 没反应&删除关联数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=48195)

--  作者:lxhmax
--  发布时间:2014/3/25 4:56:00
--  datacolchanged 没反应&删除关联数据
麻烦各位老师帮我看下什么情况;

1,修改或者重置 样品信息表的检测项目时,检测结果表不会因为检测流程流转记录表新增数据而跟着新增数据,即datacolchanged事件没有反应
2,当删除检测流程流转记录表数据的时候,如果检测结果有多条子明细的时候(流转记录表11-004的数据一条对应检测结果11-004三条数据,删除的时候我是想删除流转记录表一条信息时,检测结果对应的三条都跟着删除,实际上检测结果只删除一条数据,请问下这个要怎么弄?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:实验室管理系统1.foxdb



--  作者:Bin
--  发布时间:2014/3/25 8:26:00
--  
1.测试会自动添加
2.添加了3条同样的11-004 删除一条并未见3条一起删除.

--  作者:lxhmax
--  发布时间:2014/3/25 11:05:00
--  
奇怪了,软件问题?我重启电脑也同样不行的! 第二个问题我意思是想三条全部删除,不是只删除一条
--  作者:狐狸爸爸
--  发布时间:2014/3/25 11:41:00
--  

第一个问题,检查结果表确实没有增加,调整了红色代码的位置,也就是样品编号最后赋值,就可以了:

 

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没有取到值,自己分析比较方便,因为你知道具体的业务逻辑,别人就费力多了,要根据你的代码理清楚前后逻辑才能分析。

 

 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目234.foxdb

[此贴子已经被作者于2014-3-25 11:47:10编辑过]

--  作者:Bin
--  发布时间:2014/3/25 11:45:00
--  
额,楼主不是要这样自动添加吗? 我测试的时候怎么没问题.


图片点击可在新窗口打开查看此主题相关图片如下:1.gif
图片点击可在新窗口打开查看


--  作者:狐狸爸爸
--  发布时间:2014/3/25 11:46:00
--  

第二个问题,DatarowDeleting事件代码改为:

 

DataTables("委托协议书附件").deleteFor("样品项目 = \'" & e.DataRow("样品项目") & "\'")
DataTables("检测结果").DeleteFor("样品项目 = \'" & e.DataRow("样品项目") & "\'")

 

 

你原来的代码本来就是只删除一行的,参考:

http://www.foxtable.com/help/topics/0394.htm

 


--  作者:lxhmax
--  发布时间:2014/3/25 15:53:00
--  
非常感谢两位老师,以后会好好分析先的~