以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码运算顺序  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190937)

--  作者:lxmoffice
--  发布时间:2024/3/15 8:47:00
--  代码运算顺序
老师,

您好!

想请教一个问题, 举例说, 我在窗口里设置了1个控件, 单击控件将每个工号导入到表(考勤月清单), 表中工号变更后将自动计算每个员工考勤. 
控件导完工号后设置了重新加载代码. 

我想知道控件上代码与表(考勤月清单)中DataColchanged代码的运算顺序

是导入1个工号, 待这个工号DataColchanged代码运算完后再导入下一个工号? 还是两组代码同时进行运算?
若同时进行运算, 会不会发生控件最后一行重新加载代码滞后于表中DataColchanged代码. 


控件代码:
  For Each pr As DataRow In DataTables("员工清单").Select ("[离职]=false")
            Dim fr As DataRow = DataTables("考勤月清单").Find ("工号= \'" & pr("工号") & "\' and 年份=" & y & " and 月份=" & m & "")
            If fr Is Nothing Then
                Dim dr As DataRow = DataTables("考勤月清单").AddNew()
                dr("年份") = y
                dr("月份") = m
                dr("工号") = pr("工号")   \'工号将触发DataTables("考勤月清单")DataColChanged里面代码进行其它运算
            End If
  Next

  DataTables("考勤月清单").Load() \'重新加载





[此贴子已经被作者于2024/3/15 8:48:02编辑过]

--  作者:有点蓝
--  发布时间:2024/3/15 8:52:00
--  
任何时候只要单元格数据变化都会触发DataColChanged,所以这种代码会在每个循环里,触发事件。

也就是,增加一行-》给工号赋值-》触发DataColChanged,执行完毕-》继续循环增加一行-》给工号赋值-》触发DataColChanged......

--  作者:lxmoffice
--  发布时间:2024/3/15 12:28:00
--  
老师,

您好!

谢谢回复. 我想知道的是控件代码会不会滞后于表中DataColchanged?
例子中, 控件给表导入工号, 导完所有工号后重新加载表. 但在导入工号过程中表的DataColchanged同时在运算, 在导入最后1个工号后会不会发生DataColchanged还没运算完就重新加载表了. 
因为DataColchanged是表里写的代码, 重新加载是在控件里写的代码. 

控件代码:
  For Each pr As DataRow In DataTables("员工清单").Select ("[离职]=false")
            Dim fr As DataRow = DataTables("考勤月清单").Find ("工号= \'" & pr("工号") & "\' and 年份=" & y & " and 月份=" & m & "")
            If fr Is Nothing Then
                Dim dr As DataRow = DataTables("考勤月清单").AddNew()
                dr("年份") = y
                dr("月份") = m
                dr("工号") = pr("工号")   \'工号将触发DataTables("考勤月清单")DataColChanged里面代码进行其它运算
            End If
  Next
  DataTables("考勤月清单").Load() \'重新加载  \'此行代码在控件里面.


[此贴子已经被作者于2024/3/15 12:31:04编辑过]

--  作者:有点蓝
--  发布时间:2024/3/15 13:54:00
--  
不会的,如果事件触发,肯定要等代事件执行完毕,才会最后执行load