Foxtable(狐表)用户栏目专家坐堂 → DataColchanging 事件执行


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

主题:DataColchanging 事件执行

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
DataColchanging 事件执行  发帖心情 Post By:2024/1/3 15:41:00 [只看该作者]

老师,您好,我有一个DataColchanging的事件出现了问题, 我要实现的工作是,在WO列输入某工单号后,系统自动在当前表内实现筛选, 但却发现执行到下面黄色背景行时却没有执行, 不知道怎么回事, 能帮我看一下是什么原因吗? 谢谢!


Dim dr As DataRow = e.DataRow
Dim cn As String = e.DataCol.Name
If Not DataTables.Contains("WorkOrderStatus") Then
    DataTables.Load("WorkOrderStatus")
End If
If Not DataTables.Contains("Production_List") Then
    DataTables.Load("Production_List")
End If
Select Case cn
    Case "WO"
        Dim wo As String = e.NewValue
        Dim sn As Integer
        
        If isnumeric(wo) Then
            sn = wo
            If len(sn) <= 5 Then
                wo = "IWO" & Right("00000" & sn, 5) & "/1"
            Else
                wo = "IWO" & Right("000000" & sn, 6) & "/1"
            End If
        Else
            If Not wo.Contains("/") Then
                wo = wo & "/1" 
            Else
                wo = e.NewValue
            End If
        End If
        SystemReady = False
        e.NewValue = wo
        
        Dim dr1a As DataRow = DataTables("WorkOrderStatus").SQLFind("WO='" & wo & "'")
        If dr1a IsNot Nothing Then
            dr("PartNumber") = dr1a("PartNumber")  '程序运行到此一切正常
        Else
            dr("PartNumber") = ""
        End If 
        If dr.IsNull("Date") Then dr("Date") = Date.Now

'到了此处发现没有运行,我用Messagebox.show(1111)就是用于验证确认的
        MessageBox.Show(1111)
        '筛选写入的工单号对应行信息
        MessageBox.Show(wo)
        DataTables("IDR").LoadFilter = "WO='" & wo & "'"
        DataTables("IDR").Load
        
        '下方工单状态信息刷新
        DataTables("WorkOrderStatus").LoadFilter = "WO='" & wo & "'"
        DataTables("WorkOrderStatus").Load
        DataTables("Production_List").LoadFilter = "WO='" & wo & "'"
        DataTables("Production_List").Load
        
        Tables("IDR_Table2").sort = "OP"
        Tables("IDR_Table3").sort = "OP"
        
        Dim PN As String = dr("PartNumber")
        '工程师信息确认
        If Not DataTables.Contains("PartList") Then
            DataTables.Load("PartList")
        End If
        MessageBox.Show(PN)
        Dim dr3 As DataRow = DataTables("PartList").SQLFind("PartNumber='" & PN & "'")
        If dr3 IsNot Nothing Then
            'dr("ME") = dr3("ME")
            If dr.IsNull("QE") Then
                dr("QE") = dr3("QE")
            End If
        End If
        
        '打开图片
        Dim Pbx As WinForm.PictureBox
        If Forms("IDR").Opened Then
            pbx = Forms("IDR").Controls("PictureBox1")
        ElseIf Forms("ProductionIssue").Opened Then
            Pbx = Forms("ProductionIssue").Controls("PictureBox1") 
        End If
        
        Dim fpf As String
        Dim fp As String = "P:\General documents\Setup\Pic\" '\\freenas01chi\Production\General documents\Setup\Pic\
        fpf = fp & PN & ".jpg"
        
        If FileSys.FileExists(fpf) = False Then
            fp = "T:\ME\ME Documentation\Picture\" '\\domain.pragon\china\ME\ME Documentation\Picture\" & PN & ".jpg"
            fpf = fp & PN & ".jpg"
            If FileSys.FileExists(fpf) = False Then 
                fpf = "P:\General documents\Setup\Pic\Error.jpg" 
            End If 
        End If
        pbx.ImageFile = fpf
        pbx.SizeMode = ImageSizeMode.Zoom 
    Case "OP"
        Dim wo As String = dr("WO")
        Dim op As Integer = e.NewValue
        Dim dr1 As DataRow = DataTables("WorkOrderStatus").sqlFind("WO='" & wo & "' and OP =" & op)
        If dr1 IsNot Nothing Then
            dr("ResID") = dr1("ResID")
            'dr("WOQty") = dr1("ESTQTY_IN")
            'dr("ProductDeliveryDate") = dr1("DeliveryDate")
        End If 
        If Not dr.IsNull("ResID") Then
            Dim dr2 As DataRow = DataTables("ResourceID").Find("ResID = '" & dr("ResID") & "'")
            If dr2("适用于标准化后的班组名称") = "QC" Then
                dr("ProblemLocation") = "QC I&I"
            Else
                dr("ProblemLocation") = dr2("适用于标准化后的班组名称")
            End If 
        End If
    Case "ResourceID"
        If dr.IsNull("ProblemLocation") Then
            Dim Res As String = dr("ResID")
            Dim dr1 As DataRow = DataTables("ResourceID").Find("ResourceID='" & Res & "'")
            If dr1 IsNot Nothing Then
                If dr1("适用于标准化后的班组名称") = "QC" Then
                    dr("ProblemLocation") = "QC I&I"
                Else
                    dr("DataSource") = dr1("适用于标准化后的班组名称")
                End If
            End If
        End If
    Case "Disposition_Machining"
        Dim dr2a As DataRow = DataTables("Data").Find("CostProcess = '机加工'")
        dr("ReworkCost_Maching") = round2(dr2a("CostProcess_PerHour") * e.NewValue / 60, 1)
        dr("ReworkCost") = dr("ReworkCost_Maching") + dr("ReworkCost_SecondaryProcess") + dr("ReworkCost_QC")
        dr("SubtotalCost") = dr("RMCost") + dr("LaborCost") + dr("BurdenCost") + dr("OutSourcingCost") + dr("ReworkCost") + dr("OtherCost")
    Case "Disposition_SecondaryProcess"
        Dim dr2b As DataRow = DataTables("Data").Find("CostProcess = '后处理'")
        dr("ReworkCost_SecondaryProcess") = round2(dr2b("CostProcess_PerHour") * e.NewValue / 60, 1)
        dr("ReworkCost") = dr("ReworkCost_Maching") + dr("ReworkCost_SecondaryProcess") + dr("ReworkCost_QC")
        dr("SubtotalCost") = dr("RMCost") + dr("LaborCost") + dr("BurdenCost") + dr("OutSourcingCost") + dr("ReworkCost") + dr("OtherCost")
    Case "Disposition_QC"
        Dim dr2c As DataRow = DataTables("Data").Find("CostProcess = 'QC'")
        dr("ReworkCost_QC") = round2(dr2c("CostProcess_PerHour") * e.NewValue / 60, 2)
        dr("ReworkCost") = dr("ReworkCost_Maching") + dr("ReworkCost_SecondaryProcess") + dr("ReworkCost_QC")
        dr("SubtotalCost")=dr("RMCost")+dr("LaborCost")+dr("BurdenCost")+dr("OutSourcingCost")+dr("ReworkCost")+dr("OtherCost")
Case "OtherCost"
                dr("SubtotalCost") = dr("RMCost") + dr("LaborCost") + dr("BurdenCost") + dr("OutSourcingCost") + dr("ReworkCost") + e.NewValue

        
End Select
SystemReady = True
[此贴子已经被作者于2024/1/3 15:54:48编辑过]

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/1/3 15:43:00 [只看该作者]

程序执行到黄色背景处我增加了一行调试代码 Messagebox.show(1111),该对话框没有产生提示(没有执行)

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109200 积分:555620 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/3 15:44:00 [只看该作者]

代码在哪个表的datacolchanged事件?

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/1/3 15:50:00 [只看该作者]

是IDR的DataColchanging 的事件, 即非上述2个table中,而是第3个Table
[此贴子已经被作者于2024/1/3 15:55:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109200 积分:555620 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/3 15:56:00 [只看该作者]

那这种叫神仙用法,只有神仙才能执行的了。

首先除了下面代码,其它代码都应该放到datacolchanged事件,每个事件都有其使用场合,不要乱用,不是所有代码都放到一个事件来解决问题的,不然Foxtable里何必有那么多事件!

Select Case cn
    Case "WO"
        Dim wo As String = e.NewValue
        Dim sn As Integer
        
        If isnumeric(wo) Then
            sn = wo
            If len(sn) <= 5 Then
                wo = "IWO" & Right("00000" & sn, 5) & "/1"
            Else
                wo = "IWO" & Right("000000" & sn, 6) & "/1"
            End If
        Else
            If Not wo.Contains("/") Then
                wo = wo & "/1" 
            Else
                wo = e.NewValue
            End If
        End If
        SystemReady = False
        e.NewValue = wo

最主要的问题是,完全不应该在表事件里加载自己,这个用法会导致很多问题

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/1/3 15:59:00 [只看该作者]

那好,我马上转移, 确实对于两者使用的细微差异没有明白

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109200 积分:555620 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/3 16:05:00 [只看该作者]

看这个2个事件帮助的说明

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/1/3 16:10:00 [只看该作者]

当我将下面部分的程序从DataDocchanging 转移到了DataDocChanged 后发现还是没有执行

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109200 积分:555620 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/3 16:11:00 [只看该作者]

看5楼最后一句

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


加好友 发短信
等级:童狐 帖子:279 积分:2043 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/1/3 16:15:00 [只看该作者]

这个的要求的由来是,这个是一个IDR 不合格台帐, 此前老出现我们QC(检验人员)重复登记相同项,因此我就基于报警的想法, 在表内如果增加行后输入完成工单号后,如果表内以前已经存在该工单行,那么当前表就显示所有该工单号的数据行, 并提示存在多行, 如果以前表内没有改工单行数据,则没有提示直接输入,所以我想通过这个事件实现该功能

 回到顶部
总数 16 1 2 下一页