Foxtable(狐表)用户栏目专家坐堂 → 动态fill窗口表加载数据后闪屏问题请教?


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

主题:动态fill窗口表加载数据后闪屏问题请教?

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
动态fill窗口表加载数据后闪屏问题请教?  发帖心情 Post By:2013/7/3 15:38:00 [只看该作者]

项目中的表全部用动态Fill到窗口table中,然后再加载数据。有明细表的加载后还要筛选只显示主表第一行的数据,所以出现闪屏的问题,请教各位大师,如何解决。谢谢!


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

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

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

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/7/3 15:50:00 [只看该作者]

参考:

 

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

 

With Tables("订单")
    .
StopRedraw

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

End With


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/7/3 16:14:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目932.foxdb


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/3 16:38:00 [只看该作者]

放到最开头 FILL之前

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/7/3 16:58:00 [只看该作者]

谢谢BIN,入在Fill前好了一点,但还是闪,是不是要按程序段配对才可以啊,能否一个在前一个程序段内,而另一个在另外的程序段?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/3 16:59:00 [只看该作者]

一定要配对出现.

 回到顶部