以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  动态fill窗口表加载数据后闪屏问题请教?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=37247)

--  作者:zpx_2012
--  发布时间:2013/7/3 15:38:00
--  动态fill窗口表加载数据后闪屏问题请教?
项目中的表全部用动态Fill到窗口table中,然后再加载数据。有明细表的加载后还要筛选只显示主表第一行的数据,所以出现闪屏的问题,请教各位大师,如何解决。谢谢!


加载及筛选的代码都在全局表事件afterload和positiongchanged中;
实际项目使用的是sql2005的外部数据源,远程使用加载数据时闪屏更明显。

打开项目后在目录树中点击表A时就会出现。

[此贴子已经被作者于2013-7-3 15:39:42编辑过]

--  作者:狐狸爸爸
--  发布时间:2013/7/3 15:50:00
--  

参考:

 

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

 

With Tables("订单")
    .
StopRedraw

    .Fill(.......)
 
   .ResumeRedraw

End With


--  作者:狐狸爸爸
--  发布时间:2013/7/3 16:14:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目932.foxdb


--  作者:zpx_2012
--  发布时间:2013/7/3 16:26:00
--  

狐爸,加了那两句代码还是一样,我的情况感觉比较复杂:

第一步是点击目录树节点后打开窗口加载空表进来

Forms(Mtb).Open

Tables(Mtb & "_主表").Fill("select *,0 as RowNum from {" & Mtb & "} where [_Identify] < 0","EI",False)

If Ctb > "" Then \'如果存在明细表,加载明细表空表

   Tables(Mtb & "_明细").Fill("select *,0 as RowNum from {" & Ctb & "} where [_Identify] < 0","EI",False)

End If



--  作者:zpx_2012
--  发布时间:2013/7/3 16:29:00
--  

 第二步通过调用内部的sqlload函数加载主表的首页数据进来。

   Page = 1

    Functions.Execute("LoadData")

第三步在afterload事件中加载明细表数据并在明细表中筛选出第一行主表的明细数据。   

Tables(Mtb & "_主表").StopRedraw()

If DataTables(Mtb & "_主表").DataRows.Count = 0 Then

DataTables(Mtb & "_明细").LoadFilter = "[_Identify] < 0 "

Else

Dim ids As String

For Each dr As DataRow In DataTables(Mtb & "_主表").DataRows

  ids = ids & ",\'" & dr(Rcol) & "\'"

 Next

ids= ids.Trim(",")

DataTables(Mtb & "_明细").LoadFilter = Rcol & " In (" & ids & ")"

End If

DataTables(Mtb & "_明细").Load()


--  作者:zpx_2012
--  发布时间:2013/7/3 16:30:00
--  

第四步

\'只显示第一行主表的明细数据

If DataTables(Mtb & "_明细"IsNot Nothing Then

    If Tables(Mtb & "_主表").rows.count > 0 Then \'如果主表有数据

        Dim flt As String = Rcol & " = \'" & Tables(Mtb & "_主表").Current(Rcol& "\'"

        Tables(Mtb & "_明细").Filter =  flt

    End If

End If

DataTables(Mtb & "_主表").ResumeRedraw()


--  作者:zpx_2012
--  发布时间:2013/7/3 16:34:00
--  
狐爸,我的情况感觉比较复杂:
第一步是点击目录树节点后打开窗口加载空表进来
Forms(Mtb).Open
Tables(Mtb & "_主表").Fill("select *,0 as RowNum from {" & Mtb & "} where [_Identify] < 0","EI",False)
If Ctb > "" Then \'如果存在明细表,加载明细表空表
   Tables(Mtb & "_明细").Fill("select *,0 as RowNum from {" & Ctb & "} where [_Identify] < 0","EI",False)
End If
 第二步通过调用内部的sqlload函数加载主表的首页数据进来。
   Page = 1
    Functions.Execute("LoadData")
第三步在afterload事件中加载明细表数据并在明细表中筛选出第一行主表的明细数据。   
     \'如果主表没数据不加载明细,
Tables(Mtb & "_主表").StopRedraw()
If DataTables(Mtb & "_主表").DataRows.Count = 0 Then
    DataTables(Mtb & "_明细").LoadFilter = "[_Identify] < 0 "
Else
    Dim ids As String
    For Each dr As DataRow In DataTables(Mtb & "_主表").DataRows
        ids = ids & ",\'" & dr(Rcol) & "\'"
    Next
    ids= ids.Trim(",")
    DataTables(Mtb & "_明细").LoadFilter = Rcol & " In (" & ids & ")"
End If
DataTables(Mtb & "_明细").Load()
\'只显示第一行主表的明细数据
If DataTables(Mtb & "_明细") IsNot Nothing Then
    If Tables(Mtb & "_主表").rows.count > 0 Then \'如果主表有数据
        Dim flt As String = Rcol & " = \'" & Tables(Mtb & "_主表").Current(Rcol) & "\'"
        Tables(Mtb & "_明细").Filter =  flt
    End If
End If
DataTables(Mtb & "_主表").ResumeRedraw()
我目前只在第三步用了StopRedraw.但是没有效果,是不是用错地方了?
 
 
\'只显示第一行主表的明细数据
If DataTables(Mtb & "_明细") IsNot Nothing Then
    If Tables(Mtb & "_主表").rows.count > 0 Then \'如果主表有数据
        Dim flt As String = Rcol & " = \'" & Tables(Mtb & "_主表").Current(Rcol) & "\'"
        Tables(Mtb & "_明细").Filter =  flt
    End If
End If
DataTables(Mtb & "_主表").ResumeRedraw()
我目前只在第三步用了StopRedraw.但是没有效果,是不是用错地方了?

--  作者:Bin
--  发布时间:2013/7/3 16:38:00
--  
放到最开头 FILL之前
--  作者:zpx_2012
--  发布时间:2013/7/3 16:58:00
--  
谢谢BIN,入在Fill前好了一点,但还是闪,是不是要按程序段配对才可以啊,能否一个在前一个程序段内,而另一个在另外的程序段?
--  作者:Bin
--  发布时间:2013/7/3 16:59:00
--  
一定要配对出现.