以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  一个奇怪的现象  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=105772)

--  作者:rjh4078
--  发布时间:2017/8/25 16:53:00
--  一个奇怪的现象

If s > "" Then
        DataTables("工单").loadFilter = "工单号 In (" & s & ")"
        DataTables("工单").load
    End If
    \'\'System.Threading.Thread.sleep(3000)
    
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\生产计划单.xls") \'打开模板
    Dim fl As String = ProjectPath & "Reports\\生产计划单.xls"
    Book.Build() \'生成报表
    Book.Save(fl)
Dim Proc As New Process
    Proc.File = fl
    Proc.Start()
红色部分代码在蓝色代码执行完成后才执行, 导致出来的表是上一个条件的数据,我加了一段紫色代码等待几秒才是正确的,,我试着把等待时间减少,发现不行,如果数据多点3秒也不行。这个要怎么处理。VB不是按顺序执行么?


--  作者:有点甜
--  发布时间:2017/8/25 17:02:00
--  

不应该,load是阻塞的,肯定是加载完以后,才会执行后面的代码。

 

例子发上来看看。


--  作者:rjh4078
--  发布时间:2017/8/25 17:09:00
--  
项目太大了 发不了例子
--  作者:有点甜
--  发布时间:2017/8/25 17:10:00
--  
以下是引用rjh4078在2017/8/25 17:09:00的发言:
项目太大了 发不了例子

 

单独做个例子发上来,肯定没问题的。你其它代码影响了吧?


--  作者:rjh4078
--  发布时间:2017/8/25 17:35:00
--  
这个按钮里只有这么多代码 前面是加载的生成条件 
现在只有按2次出来才是正确的,第一次出来的就是上一次条件加载的数据

--  作者:有点甜
--  发布时间:2017/8/25 17:38:00
--  
以下是引用rjh4078在2017/8/25 17:35:00的发言:
这个按钮里只有这么多代码 前面是加载的生成条件 
现在只有按2次出来才是正确的,第一次出来的就是上一次条件加载的数据

 

添加一个新表,引用你的表数据,然后执行同样的代码,有没有问题?

[此贴子已经被作者于2017/8/25 17:38:32编辑过]

--  作者:rjh4078
--  发布时间:2017/8/25 17:38:00
--  
Dim s As String
Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1")
If l.items.Count>0 Then
    For Each Index As Integer In l.CheckedIndices
        If s > "" Then
            s = s & ","
        End If
        s = s & "\'" & l.Items(Index) & "\'"
    Next    
    If s > "" Then
        DataTables("工单").loadFilter = "工单号 In (" & s & ")"
        DataTables("工单").load        
        Dim Book As New XLS.Book(ProjectPath & "Attachments\\生产计划单.xls") \'打开模板
        Dim fl As String = ProjectPath & "Reports\\生产计划单.xls"
        Book.Build() \'生成报表
        Book.Save(fl)        
        Dim Proc As New Process
        Proc.File = fl
        Proc.Start()
    End If
    
Else
    MessageBox.show("请选择导出工单!","提示")
End If

完整的代码
[此贴子已经被作者于2017/8/25 17:38:33编辑过]

--  作者:rjh4078
--  发布时间:2017/8/25 17:54:00
--  
有哪里的代码会影响报表呢?报表事件里的代码全部注释了
--  作者:有点甜
--  发布时间:2017/8/25 18:00:00
--  

 代码肯定没问题,你可以加入msgbox测试。

 

 如果不行,单独做个例子发上来。


--  作者:rjh4078
--  发布时间:2017/8/25 18:52:00
--  
我在afterload事件加入了2个messagebox代码 发现这个提示是在excel报表打开后再弹出

MessageBox.show("2")
e.DataTable.LoadChildren("acp")
e.DataTable.LoadChildren("apo")
e.DataTable.LoadChildren("ace")
e.DataTable.LoadChildren("acd")

MessageBox.show("3")