Foxtable(狐表)用户栏目专家坐堂 → [求助]绘制单元格代码太卡,哪位大神能帮我优化一下


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

主题:[求助]绘制单元格代码太卡,哪位大神能帮我优化一下

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


加好友 发短信
等级:婴狐 帖子:42 积分:307 威望:0 精华:0 注册:2013/9/4 19:40:00
回复:(有点甜)?用下面的代码,可能会好一些,...  发帖心情 Post By:2013/9/9 22:23:00 [只看该作者]

图片点击可在新窗口打开查看试了下,我的电脑速度提升不明显,没有那种起死回生的赶脚,不过还是谢谢大哥,能在百忙中抽空给我看程序,多谢~!图片点击可在新窗口打开查看
[此贴子已经被作者于2013-9-9 22:24:20编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/9/9 22:37:00 [只看该作者]

以下是引用wangyi870704在2013-9-9 22:23:00的发言:
图片点击可在新窗口打开查看试了下,我的电脑速度提升不明显,没有那种起死回生的赶脚,不过还是谢谢大哥,能在百忙中抽空给我看程序,多谢~!图片点击可在新窗口打开查看
[此贴子已经被作者于2013-9-9 22:24:20编辑过]


主要的问题,是要去判断比较是否红色,比较耗时。

你可以另外用一张表,记录红色的位置,就不需要每次都循环比较值了,时间都是耗在那里的。

在drawcell里的代码,越简单越好,最好是一步可以达到值。

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/9/10 8:46:00 [只看该作者]

全局变量:drawcellbl 初始值 True

DrawCell事件:

If Vars("drawcellbl") = False Then
    Return
End If

 

下面再传一个比较完美的解决方案:

拖拉滚动条的时候,不绘制单元格.

表中选择一个区域,然后单击,就恢复绘制。

 

 

[此贴子已经被作者于2013-9-10 10:00:44编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/9/10 10:02:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:彩piao项目1_1.rar


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/9/10 23:06:00 [只看该作者]

 14楼的方法很好了,介绍另一种方法。就是生成记录的样式,做一张表,然后运行如下代码(这个过程是相当漫长的,耐心等待,因为有38万行数据)

Dim t_data As Table = Tables("Main")
Dim t_style As Table = Tables("样式记录")
t_data.StopRedraw
t_style.StopRedraw
For Each r As Row In t_data.Rows
    For Each c As Col In t_data.Cols
        Dim newrow As Row = t_style.AddNew
        Dim flag As Boolean = False
        If r.IsNull(c.Name) = False AndAlso r.Index < t_data.Rows.Count - 1 Then
            For j As Integer = 0 To 6
                Dim s As New List (Of String)
                Dim val As String = r(c.Name)
                Dim nr As Row = t_data.rows(r.Index + 1)
                             
                For i As Integer = 1 To 6
                    If val = nr(33*j+i) Then
                        flag = True
                        Exit For
                    End If
                Next
                If c.Index >(33*j) AndAlso c.Index < (33*(j+1)+1) AndAlso flag Then
                    newrow("样式") = "下期中奖号码"
                    Exit For
                Else
                    flag = False
                End If
            Next
        End If
        If flag = False Then
            If c.Name.Contains("未中奖号")  Then
                newrow("样式") = "未中奖号"
            Else If c.Name.Contains("中奖号") Then
                newrow("样式") = "中奖号"
            Else If c.Name = "期号" Then
                newrow("样式") = "期号"
            End If
        End If
        newrow("X") = r.Index
        newrow("Y") = c.Index
    Next
Next
t_data.ResumeRedraw
t_style.ResumeRedraw

 然后在drawcell里写代码

Dim fdr As DataRow = DataTables("样式记录").Find("X = " & e.Row.Index & " And Y = " & e.Col.Index)
If fdr IsNot Nothing Then
    e.Style = fdr("样式")
End If、

 不过,效果测试过后也不是很显著,所以最好结合14楼方法。

 回到顶部
总数 15 上一页 1 2