Foxtable(狐表)用户栏目专家坐堂 → datacolchanged 没反应&删除关联数据


  共有5576人关注过本帖树形打印复制链接

主题:datacolchanged 没反应&删除关联数据

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/3/25 11:46:00 [显示全部帖子]

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

 

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

 

 

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

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

 


 回到顶部