以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- DataColchanging 事件执行 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189895) |
-- 作者:creastzh -- 发布时间:2024/1/3 15:41:00 -- DataColchanging 事件执行 老师,您好,我有一个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 -- 发布时间:2024/1/3 15:43:00 -- 程序执行到黄色背景处我增加了一行调试代码 Messagebox.show(1111),该对话框没有产生提示(没有执行) |
-- 作者:有点蓝 -- 发布时间:2024/1/3 15:44:00 -- 代码在哪个表的datacolchanged事件? |
-- 作者:creastzh -- 发布时间:2024/1/3 15:50:00 -- 是IDR的DataColchanging 的事件, 即非上述2个table中,而是第3个Table [此贴子已经被作者于2024/1/3 15:55:36编辑过]
|
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2024/1/3 15:59:00 -- 那好,我马上转移, 确实对于两者使用的细微差异没有明白 |
-- 作者:有点蓝 -- 发布时间:2024/1/3 16:05:00 -- 看这个2个事件帮助的说明 |
-- 作者:creastzh -- 发布时间:2024/1/3 16:10:00 -- 当我将下面部分的程序从DataDocchanging 转移到了DataDocChanged 后发现还是没有执行 |
-- 作者:有点蓝 -- 发布时间:2024/1/3 16:11:00 -- 看5楼最后一句 |
-- 作者:creastzh -- 发布时间:2024/1/3 16:15:00 -- 这个的要求的由来是,这个是一个IDR 不合格台帐, 此前老出现我们QC(检验人员)重复登记相同项,因此我就基于报警的想法, 在表内如果增加行后输入完成工单号后,如果表内以前已经存在该工单行,那么当前表就显示所有该工单号的数据行, 并提示存在多行, 如果以前表内没有改工单行数据,则没有提示直接输入,所以我想通过这个事件实现该功能 |